[2/2] msi: Detect privately installed assemblies.
Hans Leidekker
hans at codeweavers.com
Wed Mar 25 07:52:56 CDT 2009
Another fix for the office 2007 sp1 installer.
-Hans
diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index ce038a1..92b95df 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -6070,9 +6070,24 @@ static UINT load_assembly(MSIRECORD *rec, LPVOID param)
assembly->manifest = strdupW(MSI_RecordGetString(rec, 3));
assembly->application = strdupW(MSI_RecordGetString(rec, 4));
assembly->attributes = MSI_RecordGetInteger(rec, 5);
- assembly->installed = check_assembly_installed(list->package->db,
- list->cache,
- assembly->component);
+
+ if (assembly->application)
+ {
+ WCHAR version[24];
+ DWORD size = sizeof(version)/sizeof(WCHAR);
+
+ /* FIXME: we should probably check the manifest file here */
+
+ if (!MsiGetFileVersionW(assembly->file->TargetPath, version, &size, NULL, NULL) &&
+ strcmpW(version, assembly->file->Version) >= 0)
+ {
+ assembly->installed = TRUE;
+ }
+ }
+ else
+ assembly->installed = check_assembly_installed(list->package->db,
+ list->cache,
+ assembly->component);
list_add_head(list->assemblies, &assembly->entry);
return ERROR_SUCCESS;
More information about the wine-patches
mailing list