Hans Leidekker : msi: Detect privately installed assemblies.

Alexandre Julliard julliard at winehq.org
Wed Mar 25 10:31:33 CDT 2009


Module: wine
Branch: master
Commit: 9c6e6efa32976e9a91330bf5bd1c0be02d6b6167
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9c6e6efa32976e9a91330bf5bd1c0be02d6b6167

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Wed Mar 25 13:52:56 2009 +0100

msi: Detect privately installed assemblies.

Another fix for the office 2007 sp1 installer.

---

 dlls/msi/action.c |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)

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-cvs mailing list