msi: Set more 64-bit properties.
This commit is contained in:
parent
ddbf3c754e
commit
dfc9351ba4
|
@ -659,6 +659,9 @@ static VOID set_installer_properties(MSIPACKAGE *package)
|
|||
static const WCHAR szMsiAMD64[] = { 'M','s','i','A','M','D','6','4',0 };
|
||||
static const WCHAR szMsix64[] = { 'M','s','i','x','6','4',0 };
|
||||
static const WCHAR szSystem64Folder[] = { 'S','y','s','t','e','m','6','4','F','o','l','d','e','r',0 };
|
||||
static const WCHAR szCommonFiles64Folder[] = { 'C','o','m','m','o','n','F','i','l','e','s','6','4','F','o','l','d','e','r',0 };
|
||||
static const WCHAR szProgramFiles64Folder[] = { 'P','r','o','g','r','a','m','F','i','l','e','s','6','4','F','o','l','d','e','r',0 };
|
||||
static const WCHAR szVersionNT64[] = { 'V','e','r','s','i','o','n','N','T','6','4',0 };
|
||||
static const WCHAR szUserInfo[] = {
|
||||
'S','O','F','T','W','A','R','E','\\',
|
||||
'M','i','c','r','o','s','o','f','t','\\',
|
||||
|
@ -698,14 +701,6 @@ static VOID set_installer_properties(MSIPACKAGE *package)
|
|||
* RedirectedDllSupport
|
||||
*/
|
||||
|
||||
SHGetFolderPathW(NULL, CSIDL_PROGRAM_FILES_COMMON, NULL, 0, pth);
|
||||
strcatW(pth, szBackSlash);
|
||||
msi_set_property(package->db, szCommonFilesFolder, pth);
|
||||
|
||||
SHGetFolderPathW(NULL, CSIDL_PROGRAM_FILES, NULL, 0, pth);
|
||||
strcatW(pth, szBackSlash);
|
||||
msi_set_property(package->db, szProgramFilesFolder, pth);
|
||||
|
||||
SHGetFolderPathW(NULL, CSIDL_COMMON_APPDATA, NULL, 0, pth);
|
||||
strcatW(pth, szBackSlash);
|
||||
msi_set_property(package->db, szCommonAppDataFolder, pth);
|
||||
|
@ -828,20 +823,53 @@ static VOID set_installer_properties(MSIPACKAGE *package)
|
|||
sprintfW( bufstr, szFormat, MSI_MAJORVERSION * 100);
|
||||
msi_set_property( package->db, szVersionDatabase, bufstr );
|
||||
|
||||
GetSystemInfo( &sys_info );
|
||||
GetNativeSystemInfo( &sys_info );
|
||||
sprintfW( bufstr, szIntFormat, sys_info.wProcessorLevel );
|
||||
if (sys_info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)
|
||||
{
|
||||
sprintfW( bufstr, szIntFormat, sys_info.wProcessorLevel );
|
||||
msi_set_property( package->db, szIntel, bufstr );
|
||||
|
||||
GetSystemDirectoryW( pth, MAX_PATH );
|
||||
PathAddBackslashW( pth );
|
||||
msi_set_property( package->db, szSystemFolder, pth );
|
||||
|
||||
SHGetFolderPathW( NULL, CSIDL_PROGRAM_FILES, NULL, 0, pth );
|
||||
PathAddBackslashW( pth );
|
||||
msi_set_property( package->db, szProgramFilesFolder, pth );
|
||||
|
||||
SHGetFolderPathW( NULL, CSIDL_PROGRAM_FILES_COMMON, NULL, 0, pth );
|
||||
PathAddBackslashW( pth );
|
||||
msi_set_property( package->db, szCommonFilesFolder, pth );
|
||||
}
|
||||
else if (sys_info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
|
||||
{
|
||||
sprintfW( bufstr, szIntFormat, sys_info.wProcessorLevel );
|
||||
msi_set_property( package->db, szMsiAMD64, bufstr );
|
||||
msi_set_property( package->db, szMsix64, bufstr );
|
||||
msi_set_property( package->db, szVersionNT64, verstr );
|
||||
|
||||
GetSystemDirectoryW( pth, MAX_PATH );
|
||||
PathAddBackslashW( pth );
|
||||
msi_set_property( package->db, szSystem64Folder, pth );
|
||||
|
||||
GetSystemWow64DirectoryW( pth, MAX_PATH );
|
||||
PathAddBackslashW( pth );
|
||||
msi_set_property( package->db, szSystemFolder, pth );
|
||||
|
||||
SHGetFolderPathW( NULL, CSIDL_PROGRAM_FILES, NULL, 0, pth );
|
||||
PathAddBackslashW( pth );
|
||||
msi_set_property( package->db, szProgramFiles64Folder, pth );
|
||||
|
||||
SHGetFolderPathW( NULL, CSIDL_PROGRAM_FILESX86, NULL, 0, pth );
|
||||
PathAddBackslashW( pth );
|
||||
msi_set_property( package->db, szProgramFilesFolder, pth );
|
||||
|
||||
SHGetFolderPathW( NULL, CSIDL_PROGRAM_FILES_COMMON, NULL, 0, pth );
|
||||
PathAddBackslashW( pth );
|
||||
msi_set_property( package->db, szCommonFiles64Folder, pth );
|
||||
|
||||
SHGetFolderPathW( NULL, CSIDL_PROGRAM_FILES_COMMONX86, NULL, 0, pth );
|
||||
PathAddBackslashW( pth );
|
||||
msi_set_property( package->db, szCommonFilesFolder, pth );
|
||||
}
|
||||
|
||||
/* Screen properties. */
|
||||
|
|
|
@ -3448,7 +3448,8 @@ static BOOL get_system_dirs(void)
|
|||
}
|
||||
|
||||
size = MAX_PATH;
|
||||
if (RegQueryValueExA(hkey, "CommonFilesDir", 0, &type, (LPBYTE)COMMON_FILES_DIR, &size)) {
|
||||
if (RegQueryValueExA(hkey, "CommonFilesDir (x86)", 0, &type, (LPBYTE)COMMON_FILES_DIR, &size) &&
|
||||
RegQueryValueExA(hkey, "CommonFilesDir", 0, &type, (LPBYTE)COMMON_FILES_DIR, &size)) {
|
||||
RegCloseKey(hkey);
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <msi.h>
|
||||
#include <msiquery.h>
|
||||
#include <srrestoreptapi.h>
|
||||
#include <shlobj.h>
|
||||
|
||||
#include "wine/test.h"
|
||||
|
||||
|
@ -34,6 +35,7 @@ static const char msifile[] = "winetest-package.msi";
|
|||
static char CURR_DIR[MAX_PATH];
|
||||
|
||||
static UINT (WINAPI *pMsiApplyMultiplePatchesA)(LPCSTR, LPCSTR, LPCSTR);
|
||||
static HRESULT (WINAPI *pSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR);
|
||||
|
||||
static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*);
|
||||
static BOOL (WINAPI *pGetTokenInformation)( HANDLE, TOKEN_INFORMATION_CLASS, LPVOID, DWORD, PDWORD );
|
||||
|
@ -42,6 +44,7 @@ static LONG (WINAPI *pRegDeleteKeyExA)(HKEY, LPCSTR, REGSAM, DWORD);
|
|||
static LONG (WINAPI *pRegDeleteKeyExW)(HKEY, LPCWSTR, REGSAM, DWORD);
|
||||
static BOOL (WINAPI *pIsWow64Process)(HANDLE, PBOOL);
|
||||
static void (WINAPI *pGetSystemInfo)(LPSYSTEM_INFO);
|
||||
static UINT (WINAPI *pGetSystemWow64DirectoryA)(LPSTR, UINT);
|
||||
|
||||
static BOOL (WINAPI *pSRRemoveRestorePoint)(DWORD);
|
||||
static BOOL (WINAPI *pSRSetRestorePointA)(RESTOREPOINTINFOA*, STATEMGRSTATUS*);
|
||||
|
@ -51,12 +54,14 @@ static void init_functionpointers(void)
|
|||
HMODULE hmsi = GetModuleHandleA("msi.dll");
|
||||
HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
|
||||
HMODULE hkernel32 = GetModuleHandleA("kernel32.dll");
|
||||
HMODULE hshell32 = GetModuleHandleA("shell32.dll");
|
||||
HMODULE hsrclient;
|
||||
|
||||
#define GET_PROC(mod, func) \
|
||||
p ## func = (void*)GetProcAddress(mod, #func);
|
||||
|
||||
GET_PROC(hmsi, MsiApplyMultiplePatchesA);
|
||||
GET_PROC(hshell32, SHGetFolderPathA);
|
||||
|
||||
GET_PROC(hadvapi32, ConvertSidToStringSidA);
|
||||
GET_PROC(hadvapi32, GetTokenInformation);
|
||||
|
@ -65,6 +70,7 @@ static void init_functionpointers(void)
|
|||
GET_PROC(hadvapi32, RegDeleteKeyExW)
|
||||
GET_PROC(hkernel32, IsWow64Process)
|
||||
GET_PROC(hkernel32, GetSystemInfo)
|
||||
GET_PROC(hkernel32, GetSystemWow64DirectoryA)
|
||||
|
||||
hsrclient = LoadLibraryA("srclient.dll");
|
||||
GET_PROC(hsrclient, SRRemoveRestorePoint);
|
||||
|
@ -9575,7 +9581,7 @@ static void test_installprops(void)
|
|||
int res;
|
||||
UINT r;
|
||||
REGSAM access = KEY_ALL_ACCESS;
|
||||
BOOL wow64;
|
||||
BOOL wow64 = FALSE;
|
||||
SYSTEM_INFO si;
|
||||
|
||||
if (pIsWow64Process && pIsWow64Process(GetCurrentProcess(), &wow64) && wow64)
|
||||
|
@ -9687,7 +9693,7 @@ static void test_installprops(void)
|
|||
r = MsiGetProperty(hpkg, "ScreenY", buf, &size);
|
||||
ok(atol(buf) == res, "Expected %d, got %ld\n", res, atol(buf));
|
||||
|
||||
if (pGetSystemInfo)
|
||||
if (pGetSystemInfo && pSHGetFolderPathA)
|
||||
{
|
||||
pGetSystemInfo(&si);
|
||||
if (S(U(si)).wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
|
||||
|
@ -9708,8 +9714,185 @@ static void test_installprops(void)
|
|||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "System64Folder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
GetSystemDirectoryA(path, MAX_PATH);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "SystemFolder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
pGetSystemWow64DirectoryA(path, MAX_PATH);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "ProgramFiles64Folder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
pSHGetFolderPathA(NULL, CSIDL_PROGRAM_FILES, NULL, 0, path);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "ProgramFilesFolder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
pSHGetFolderPathA(NULL, CSIDL_PROGRAM_FILESX86, NULL, 0, path);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "CommonFiles64Folder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
pSHGetFolderPathA(NULL, CSIDL_PROGRAM_FILES_COMMON, NULL, 0, path);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "CommonFilesFolder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
pSHGetFolderPathA(NULL, CSIDL_PROGRAM_FILES_COMMONX86, NULL, 0, path);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "VersionNT64", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(buf[0], "property not set\n");
|
||||
}
|
||||
else if (S(U(si)).wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)
|
||||
{
|
||||
if (!wow64)
|
||||
{
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "MsiAMD64", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(!buf[0], "property set\n");
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "Msix64", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(!buf[0], "property set\n");
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "System64Folder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(!buf[0], "property set\n");
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "SystemFolder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
GetSystemDirectoryA(path, MAX_PATH);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "ProgramFiles64Folder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(!buf[0], "property set\n");
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "ProgramFilesFolder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
pSHGetFolderPathA(NULL, CSIDL_PROGRAM_FILES, NULL, 0, path);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "CommonFiles64Folder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(!buf[0], "property set\n");
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "CommonFilesFolder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
pSHGetFolderPathA(NULL, CSIDL_PROGRAM_FILES_COMMON, NULL, 0, path);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "VersionNT64", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(!buf[0], "property set\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "MsiAMD64", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(buf[0], "property not set\n");
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "Msix64", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(buf[0], "property not set\n");
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "System64Folder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
GetSystemDirectoryA(path, MAX_PATH);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "SystemFolder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
pGetSystemWow64DirectoryA(path, MAX_PATH);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "ProgramFilesFolder64", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(!buf[0], "property set\n");
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "ProgramFilesFolder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
pSHGetFolderPathA(NULL, CSIDL_PROGRAM_FILESX86, NULL, 0, path);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "CommonFilesFolder64", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(!buf[0], "property set\n");
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "CommonFilesFolder", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
pSHGetFolderPathA(NULL, CSIDL_PROGRAM_FILES_COMMONX86, NULL, 0, path);
|
||||
if (size) buf[size - 1] = 0;
|
||||
ok(!lstrcmpiA(path, buf), "expected \"%s\", got \"%s\"\n", path, buf);
|
||||
|
||||
buf[0] = 0;
|
||||
size = MAX_PATH;
|
||||
r = MsiGetProperty(hpkg, "VersionNT64", buf, &size);
|
||||
ok(r == ERROR_SUCCESS, "failed to get property: %d\n", r);
|
||||
ok(buf[0], "property not set\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CloseHandle(hkey1);
|
||||
|
|
Loading…
Reference in New Issue