Aric Stewart : msi: Verify the existence of fusion. dll before reporting the .Net version.
Alexandre Julliard
julliard at winehq.org
Wed Mar 25 10:31:32 CDT 2009
Module: wine
Branch: master
Commit: 28bc76b5d3487a7a3cf26f5edea1e59472ea6916
URL: http://source.winehq.org/git/wine.git/?a=commit;h=28bc76b5d3487a7a3cf26f5edea1e59472ea6916
Author: Aric Stewart <aric at codeweavers.com>
Date: Wed Mar 18 14:31:14 2009 -0500
msi: Verify the existence of fusion.dll before reporting the .Net version.
Fixes an issue with .Net 3.0 where it does not install a new
fusion.dll but does add a key to the registery. The fact that a new
dll is not installed has been verified on windows.
---
dlls/msi/package.c | 52 ++++++++++++++++++++++++++++++++--------------------
1 files changed, 32 insertions(+), 20 deletions(-)
diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index b2c46a2..ec8495f 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -220,7 +220,7 @@ static LPWSTR get_fusion_filename(MSIPACKAGE *package)
{
HKEY netsetup;
LONG res;
- LPWSTR file;
+ LPWSTR file = NULL;
DWORD index = 0, size;
WCHAR ver[MAX_PATH];
WCHAR name[MAX_PATH];
@@ -243,34 +243,46 @@ static LPWSTR get_fusion_filename(MSIPACKAGE *package)
if (res != ERROR_SUCCESS)
return NULL;
+ GetWindowsDirectoryW(windir, MAX_PATH);
+
ver[0] = '\0';
size = MAX_PATH;
while (RegEnumKeyExW(netsetup, index, name, &size, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
index++;
- if (lstrcmpW(ver, name) < 0)
- lstrcpyW(ver, name);
- }
- RegCloseKey(netsetup);
-
- if (!index)
- return NULL;
+ /* verify existence of fusion.dll .Net 3.0 does not install a new one */
+ if (lstrcmpW(ver, name) < 0)
+ {
+ LPWSTR check;
+ size = lstrlenW(windir) + lstrlenW(subdir) + lstrlenW(name) +lstrlenW(fusion) + 3;
+ check = msi_alloc(size * sizeof(WCHAR));
- GetWindowsDirectoryW(windir, MAX_PATH);
+ if (!check)
+ {
+ if (file) msi_free(file);
+ return NULL;
+ }
- size = lstrlenW(windir) + lstrlenW(subdir) + lstrlenW(ver) +lstrlenW(fusion) + 3;
- file = msi_alloc(size * sizeof(WCHAR));
- if (!file)
- return NULL;
+ lstrcpyW(check, windir);
+ lstrcatW(check, backslash);
+ lstrcatW(check, subdir);
+ lstrcatW(check, name);
+ lstrcatW(check, backslash);
+ lstrcatW(check, fusion);
- lstrcpyW(file, windir);
- lstrcatW(file, backslash);
- lstrcatW(file, subdir);
- lstrcatW(file, ver);
- lstrcatW(file, backslash);
- lstrcatW(file, fusion);
+ if(GetFileAttributesW(check) != INVALID_FILE_ATTRIBUTES)
+ {
+ msi_free(file);
+ file = check;
+ lstrcpyW(ver, name);
+ }
+ else
+ msi_free(check);
+ }
+ }
+ RegCloseKey(netsetup);
return file;
}
More information about the wine-cvs
mailing list