From 9c6e6efa32976e9a91330bf5bd1c0be02d6b6167 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Wed, 25 Mar 2009 13:52:56 +0100 Subject: [PATCH] msi: Detect privately installed assemblies. Another fix for the office 2007 sp1 installer. --- dlls/msi/action.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/dlls/msi/action.c b/dlls/msi/action.c index ce038a1d716..92b95dfbf80 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;