diff --git a/dlls/msi/files.c b/dlls/msi/files.c index db1a9629a9..9aeaaf3953 100644 --- a/dlls/msi/files.c +++ b/dlls/msi/files.c @@ -925,12 +925,6 @@ static UINT ITERATE_RemoveFiles(MSIRECORD *row, LPVOID param) install_mode = MSI_RecordGetInteger(row, 5); comp = get_loaded_component(package, component); - if (!comp) - { - ERR("Invalid component: %s\n", debugstr_w(component)); - return ERROR_FUNCTION_FAILED; - } - if (!comp->Enabled) { TRACE("component is disabled\n"); @@ -944,6 +938,12 @@ static UINT ITERATE_RemoveFiles(MSIRECORD *row, LPVOID param) return ERROR_SUCCESS; } + if (comp->Attributes & msidbComponentAttributesPermanent) + { + TRACE("permanent component, not removing file\n"); + return ERROR_SUCCESS; + } + dir = msi_dup_property(package->db, dirprop); if (!dir) return ERROR_OUTOFMEMORY; @@ -1027,6 +1027,12 @@ UINT ACTION_RemoveFiles( MSIPACKAGE *package ) continue; } + if (file->Component->Attributes & msidbComponentAttributesPermanent) + { + TRACE("permanent component, not removing file\n"); + continue; + } + if (file->Version) { ver = msi_get_disk_file_version( file->TargetPath );