[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