mirror of
https://github.com/reactos/reactos.git
synced 2025-06-04 08:50:27 +00:00
[MSI_WINETEST] Sync with Wine Staging 1.7.55. CORE-10536
svn path=/trunk/; revision=69996
This commit is contained in:
parent
9c595b7465
commit
86345c31fe
5 changed files with 209 additions and 21 deletions
|
@ -214,7 +214,8 @@ static const char environment_dat[] =
|
|||
"Var23\t+-MSITESTVAR19\t1\tOne\n"
|
||||
"Var24\t+-MSITESTVAR19\t[~]2\tOne\n"
|
||||
"Var25\t+-MSITESTVAR20\t1\tOne\n"
|
||||
"Var26\t+-MSITESTVAR20\t2[~]\tOne\n";
|
||||
"Var26\t+-MSITESTVAR20\t2[~]\tOne\n"
|
||||
"Var27\t+-MSITESTVAR21\t[~];1\tOne\n";
|
||||
|
||||
static const char service_install_dat[] =
|
||||
"ServiceInstall\tName\tDisplayName\tServiceType\tStartType\tErrorControl\t"
|
||||
|
@ -1201,7 +1202,13 @@ static const char res_environment_dat[] =
|
|||
"var2\t=+-MSITESTVAR2\t1\tenvvar\n"
|
||||
"var3\t=MSITESTVAR3\t1\tenvvar\n"
|
||||
"var4\t=-MSITESTVAR4\t\tenvvar\n"
|
||||
"var5\t=MSITESTVAR5\t\tenvvar\n";
|
||||
"var5\t=MSITESTVAR5\t\tenvvar\n"
|
||||
"Var6\t-MSITESTVAR6\t1;[~]\tenvvar\n"
|
||||
"Var7\t-MSITESTVAR7\t[~];1\tenvvar\n"
|
||||
"Var8\t-MSITESTVAR8\t1;[~]\tenvvar\n"
|
||||
"Var9\t-MSITESTVAR9\t[~];1\tenvvar\n"
|
||||
"Var10\t-MSITESTVAR10\t1\tenvvar\n"
|
||||
"Var11\t-MSITESTVAR11\t2\tenvvar\n";
|
||||
|
||||
static const char res_install_exec_seq_dat[] =
|
||||
"Action\tCondition\tSequence\n"
|
||||
|
@ -5135,6 +5142,7 @@ static void test_envvar(void)
|
|||
"1;;2;;", /* MSITESTVAR18 */
|
||||
"1", /* MSITESTVAR19 */
|
||||
"1", /* MSITESTVAR20 */
|
||||
"1", /* MSITESTVAR21 */
|
||||
NULL
|
||||
};
|
||||
UINT r;
|
||||
|
@ -5162,6 +5170,9 @@ static void test_envvar(void)
|
|||
res = RegSetValueExA(env, "MSITESTVAR2", 0, REG_SZ, (const BYTE *)"0", 2);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
res = RegSetValueExA(env, "MSITESTVAR21", 0, REG_SZ, (const BYTE *)"1", 2);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
|
||||
MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
|
||||
|
||||
r = MsiInstallProductA(msifile, NULL);
|
||||
|
@ -5254,6 +5265,7 @@ static void test_envvar(void)
|
|||
error:
|
||||
RegDeleteValueA(env, "MSITESTVAR1");
|
||||
RegDeleteValueA(env, "MSITESTVAR2");
|
||||
RegDeleteValueA(env, "MSITESTVAR21");
|
||||
RegCloseKey(env);
|
||||
|
||||
delete_test_files();
|
||||
|
@ -5838,10 +5850,14 @@ static void test_publish_components(void)
|
|||
{
|
||||
static const char keypath[] =
|
||||
"Software\\Microsoft\\Installer\\Components\\0CBCFA296AC907244845745CEEB2F8AA";
|
||||
static const char keypath2[] =
|
||||
"Software\\Classes\\Installer\\Components\\0CBCFA296AC907244845745CEEB2F8AA";
|
||||
|
||||
UINT r;
|
||||
LONG res;
|
||||
HKEY key;
|
||||
BYTE *data;
|
||||
DWORD size;
|
||||
|
||||
if (is_process_limited())
|
||||
{
|
||||
|
@ -5863,11 +5879,49 @@ static void test_publish_components(void)
|
|||
}
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
|
||||
|
||||
size = 0;
|
||||
r = MsiProvideQualifiedComponentA("{92AFCBC0-9CA6-4270-8454-47C5EE2B8FAA}",
|
||||
"english.txt", INSTALLMODE_DEFAULT, NULL, &size);
|
||||
ok(r == ERROR_SUCCESS, "MsiProvideQualifiedCompontent returned %d\n", r);
|
||||
|
||||
res = RegOpenKeyA(HKEY_CURRENT_USER, keypath, &key);
|
||||
ok(res == ERROR_SUCCESS, "components key not created %d\n", res);
|
||||
|
||||
res = RegQueryValueExA(key, "english.txt", NULL, NULL, NULL, NULL);
|
||||
res = RegQueryValueExA(key, "english.txt", NULL, NULL, NULL, &size);
|
||||
ok(res == ERROR_SUCCESS, "value not found %d\n", res);
|
||||
|
||||
data = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
res = RegQueryValueExA(key, "english.txt", NULL, NULL, data, &size);
|
||||
ok(res == ERROR_SUCCESS, "value not found %d\n", res);
|
||||
RegCloseKey(key);
|
||||
|
||||
res = RegDeleteKeyA(HKEY_CURRENT_USER, keypath);
|
||||
ok(res == ERROR_SUCCESS, "RegDeleteKey failed %d\n", res);
|
||||
|
||||
res = RegCreateKeyExA(HKEY_LOCAL_MACHINE, keypath2, 0, NULL, REG_OPTION_NON_VOLATILE,
|
||||
MAXIMUM_ALLOWED | KEY_WOW64_64KEY, NULL, &key, NULL );
|
||||
ok(res == ERROR_SUCCESS, "RegCreateKeyEx failed %d\n", res);
|
||||
res = RegSetValueExA(key, "english.txt", 0, REG_MULTI_SZ, data, size);
|
||||
ok(res == ERROR_SUCCESS, "RegSetValueEx failed %d\n", res);
|
||||
RegCloseKey(key);
|
||||
|
||||
size = 0;
|
||||
r = MsiProvideQualifiedComponentA("{92AFCBC0-9CA6-4270-8454-47C5EE2B8FAA}",
|
||||
"english.txt", INSTALLMODE_DEFAULT, NULL, &size);
|
||||
ok(r == ERROR_SUCCESS, "MsiProvideQualifiedCompontent returned %d\n", r);
|
||||
|
||||
if (pRegDeleteKeyExA)
|
||||
res = pRegDeleteKeyExA(HKEY_LOCAL_MACHINE, keypath2, KEY_WOW64_64KEY, 0);
|
||||
else
|
||||
res = RegDeleteKeyA(HKEY_LOCAL_MACHINE, keypath2);
|
||||
ok(res == ERROR_SUCCESS, "RegDeleteKey failed %d\n", res);
|
||||
|
||||
res = RegCreateKeyA(HKEY_CURRENT_USER, keypath, &key);
|
||||
ok(res == ERROR_SUCCESS, "RegCreateKey failed %d\n", res);
|
||||
|
||||
res = RegSetValueExA(key, "english.txt", 0, REG_MULTI_SZ, data, size);
|
||||
ok(res == ERROR_SUCCESS, "RegSetValueEx failed %d\n", res);
|
||||
HeapFree(GetProcessHeap(), 0, data);
|
||||
RegCloseKey(key);
|
||||
|
||||
r = MsiInstallProductA(msifile, "REMOVE=ALL");
|
||||
|
@ -6188,6 +6242,12 @@ static void test_remove_env_strings(void)
|
|||
RegSetValueExA(key, "MSITESTVAR3", 0, REG_SZ, (const BYTE *)"1", 2);
|
||||
RegSetValueExA(key, "MSITESTVAR4", 0, REG_SZ, (const BYTE *)"1", 2);
|
||||
RegSetValueExA(key, "MSITESTVAR5", 0, REG_SZ, (const BYTE *)"1", 2);
|
||||
RegSetValueExA(key, "MSITESTVAR6", 0, REG_SZ, (const BYTE *)"1;2", 4);
|
||||
RegSetValueExA(key, "MSITESTVAR7", 0, REG_SZ, (const BYTE *)"1;2", 4);
|
||||
RegSetValueExA(key, "MSITESTVAR8", 0, REG_SZ, (const BYTE *)"2;1;0", 6);
|
||||
RegSetValueExA(key, "MSITESTVAR9", 0, REG_SZ, (const BYTE *)"0;1;2", 6);
|
||||
RegSetValueExA(key, "MSITESTVAR10", 0, REG_SZ, (const BYTE *)"1", 2);
|
||||
RegSetValueExA(key, "MSITESTVAR11", 0, REG_SZ, (const BYTE *)"1", 2);
|
||||
|
||||
RegCloseKey(key);
|
||||
|
||||
|
@ -6277,6 +6337,57 @@ static void test_remove_env_strings(void)
|
|||
ok(!lstrcmpA(buffer, "1"), "expected \"1\", got \"%s\"\n", buffer);
|
||||
RegDeleteValueA(key, "MSITESTVAR5");
|
||||
|
||||
type = REG_NONE;
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
res = RegQueryValueExA(key, "MSITESTVAR6", NULL, &type, (LPBYTE)buffer, &size);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
ok(type == REG_SZ, "expected REG_SZ, got %u\n", type);
|
||||
ok(!lstrcmpA(buffer, "2"), "expected \"2\", got \"%s\"\n", buffer);
|
||||
RegDeleteValueA(key, "MSITESTVAR6");
|
||||
|
||||
type = REG_NONE;
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
res = RegQueryValueExA(key, "MSITESTVAR7", NULL, &type, (LPBYTE)buffer, &size);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
ok(type == REG_SZ, "expected REG_SZ, got %u\n", type);
|
||||
ok(!lstrcmpA(buffer, "2"), "expected \"2\", got \"%s\"\n", buffer);
|
||||
RegDeleteValueA(key, "MSITESTVAR7");
|
||||
|
||||
type = REG_NONE;
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
res = RegQueryValueExA(key, "MSITESTVAR8", NULL, &type, (LPBYTE)buffer, &size);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
ok(type == REG_SZ, "expected REG_SZ, got %u\n", type);
|
||||
ok(!lstrcmpA(buffer, "2;0"), "expected \"2;0\", got \"%s\"\n", buffer);
|
||||
RegDeleteValueA(key, "MSITESTVAR8");
|
||||
|
||||
type = REG_NONE;
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
res = RegQueryValueExA(key, "MSITESTVAR9", NULL, &type, (LPBYTE)buffer, &size);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
ok(type == REG_SZ, "expected REG_SZ, got %u\n", type);
|
||||
ok(!lstrcmpA(buffer, "0;2"), "expected \"0;2\", got \"%s\"\n", buffer);
|
||||
RegDeleteValueA(key, "MSITESTVAR9");
|
||||
|
||||
type = REG_NONE;
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
res = RegQueryValueExA(key, "MSITESTVAR10", NULL, &type, (LPBYTE)buffer, &size);
|
||||
ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res);
|
||||
|
||||
type = REG_NONE;
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
res = RegQueryValueExA(key, "MSITESTVAR11", NULL, &type, (LPBYTE)buffer, &size);
|
||||
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
|
||||
ok(type == REG_SZ, "expected REG_SZ, got %u\n", type);
|
||||
ok(!lstrcmpA(buffer, "1"), "expected \"1\", got \"%s\"\n", buffer);
|
||||
RegDeleteValueA(key, "MSITESTVAR11");
|
||||
|
||||
ok(!delete_pf("msitest\\envvar.txt", TRUE), "file not removed\n");
|
||||
ok(!delete_pf("msitest", FALSE), "directory not removed\n");
|
||||
|
||||
|
@ -6286,6 +6397,12 @@ error:
|
|||
RegDeleteValueA(key, "MSITESTVAR3");
|
||||
RegDeleteValueA(key, "MSITESTVAR4");
|
||||
RegDeleteValueA(key, "MSITESTVAR5");
|
||||
RegDeleteValueA(key, "MSITESTVAR6");
|
||||
RegDeleteValueA(key, "MSITESTVAR7");
|
||||
RegDeleteValueA(key, "MSITESTVAR8");
|
||||
RegDeleteValueA(key, "MSITESTVAR9");
|
||||
RegDeleteValueA(key, "MSITESTVAR10");
|
||||
RegDeleteValueA(key, "MSITESTVAR11");
|
||||
RegCloseKey(key);
|
||||
|
||||
DeleteFileA("msitest\\envvar.txt");
|
||||
|
|
|
@ -1127,6 +1127,25 @@ static HRESULT Installer_UILevelPut(int level)
|
|||
return invoke(pInstaller, "UILevel", DISPATCH_PROPERTYPUT, &dispparams, &varresult, VT_EMPTY);
|
||||
}
|
||||
|
||||
static HRESULT Installer_SummaryInformation(BSTR PackagePath, int UpdateCount, IDispatch **pSumInfo)
|
||||
{
|
||||
VARIANT varresult;
|
||||
VARIANTARG vararg[2];
|
||||
DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0};
|
||||
HRESULT hr;
|
||||
|
||||
VariantInit(&vararg[1]);
|
||||
V_VT(&vararg[1]) = VT_BSTR;
|
||||
V_BSTR(&vararg[1]) = SysAllocString(PackagePath);
|
||||
VariantInit(&vararg[0]);
|
||||
V_VT(&vararg[0]) = VT_I4;
|
||||
V_I4(&vararg[0]) = UpdateCount;
|
||||
|
||||
hr = invoke(pInstaller, "SummaryInformation", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_DISPATCH);
|
||||
*pSumInfo = V_DISPATCH(&varresult);
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT Session_Installer(IDispatch *pSession, IDispatch **pInst)
|
||||
{
|
||||
VARIANT varresult;
|
||||
|
@ -1184,7 +1203,7 @@ static HRESULT Session_LanguageGet(IDispatch *pSession, UINT *pLangId)
|
|||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT Session_ModeGet(IDispatch *pSession, int iFlag, BOOL *pMode)
|
||||
static HRESULT Session_ModeGet(IDispatch *pSession, int iFlag, VARIANT_BOOL *mode)
|
||||
{
|
||||
VARIANT varresult;
|
||||
VARIANTARG vararg[1];
|
||||
|
@ -1196,12 +1215,12 @@ static HRESULT Session_ModeGet(IDispatch *pSession, int iFlag, BOOL *pMode)
|
|||
V_I4(&vararg[0]) = iFlag;
|
||||
|
||||
hr = invoke(pSession, "Mode", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_BOOL);
|
||||
*pMode = V_BOOL(&varresult);
|
||||
*mode = V_BOOL(&varresult);
|
||||
VariantClear(&varresult);
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT Session_ModePut(IDispatch *pSession, int iFlag, BOOL bMode)
|
||||
static HRESULT Session_ModePut(IDispatch *pSession, int iFlag, VARIANT_BOOL mode)
|
||||
{
|
||||
VARIANT varresult;
|
||||
VARIANTARG vararg[2];
|
||||
|
@ -1213,7 +1232,7 @@ static HRESULT Session_ModePut(IDispatch *pSession, int iFlag, BOOL bMode)
|
|||
V_I4(&vararg[1]) = iFlag;
|
||||
VariantInit(&vararg[0]);
|
||||
V_VT(&vararg[0]) = VT_BOOL;
|
||||
V_BOOL(&vararg[0]) = bMode;
|
||||
V_BOOL(&vararg[0]) = mode;
|
||||
|
||||
return invoke(pSession, "Mode", DISPATCH_PROPERTYPUT, &dispparams, &varresult, VT_EMPTY);
|
||||
}
|
||||
|
@ -1856,7 +1875,7 @@ static void test_Session(IDispatch *pSession)
|
|||
WCHAR stringw[MAX_PATH];
|
||||
CHAR string[MAX_PATH];
|
||||
UINT len;
|
||||
BOOL bool;
|
||||
VARIANT_BOOL bool;
|
||||
int myint;
|
||||
IDispatch *pDatabase = NULL, *pInst = NULL, *record = NULL;
|
||||
ULONG refs_before, refs_after;
|
||||
|
@ -1924,15 +1943,15 @@ static void test_Session(IDispatch *pSession)
|
|||
ok(!bool, "Maintenance mode is %d\n", bool);
|
||||
|
||||
/* Session::Mode, put */
|
||||
hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTATEND, TRUE);
|
||||
hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTATEND, VARIANT_TRUE);
|
||||
ok(hr == S_OK, "Session_ModePut failed, hresult 0x%08x\n", hr);
|
||||
hr = Session_ModeGet(pSession, MSIRUNMODE_REBOOTATEND, &bool);
|
||||
ok(hr == S_OK, "Session_ModeGet failed, hresult 0x%08x\n", hr);
|
||||
ok(bool, "Reboot at end session mode is %d, expected 1\n", bool);
|
||||
hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTATEND, FALSE); /* set it again so we don't reboot */
|
||||
hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTATEND, VARIANT_FALSE); /* set it again so we don't reboot */
|
||||
ok(hr == S_OK, "Session_ModePut failed, hresult 0x%08x\n", hr);
|
||||
|
||||
hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTNOW, TRUE);
|
||||
hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTNOW, VARIANT_TRUE);
|
||||
ok(hr == S_OK, "Session_ModePut failed, hresult 0x%08x\n", hr);
|
||||
ok_exception(hr, szModeFlag);
|
||||
|
||||
|
@ -1940,11 +1959,11 @@ static void test_Session(IDispatch *pSession)
|
|||
ok(hr == S_OK, "Session_ModeGet failed, hresult 0x%08x\n", hr);
|
||||
ok(bool, "Reboot now mode is %d, expected 1\n", bool);
|
||||
|
||||
hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTNOW, FALSE); /* set it again so we don't reboot */
|
||||
hr = Session_ModePut(pSession, MSIRUNMODE_REBOOTNOW, VARIANT_FALSE); /* set it again so we don't reboot */
|
||||
ok(hr == S_OK, "Session_ModePut failed, hresult 0x%08x\n", hr);
|
||||
ok_exception(hr, szModeFlag);
|
||||
|
||||
hr = Session_ModePut(pSession, MSIRUNMODE_MAINTENANCE, TRUE);
|
||||
hr = Session_ModePut(pSession, MSIRUNMODE_MAINTENANCE, VARIANT_TRUE);
|
||||
ok(hr == DISP_E_EXCEPTION, "Session_ModePut failed, hresult 0x%08x\n", hr);
|
||||
ok_exception(hr, szModeFlag);
|
||||
|
||||
|
@ -2601,7 +2620,7 @@ static void test_Installer(void)
|
|||
static const WCHAR szIntegerDataException[] = { 'I','n','t','e','g','e','r','D','a','t','a',',','F','i','e','l','d',0 };
|
||||
WCHAR szPath[MAX_PATH];
|
||||
HRESULT hr;
|
||||
IDispatch *pSession = NULL, *pDatabase = NULL, *pRecord = NULL, *pStringList = NULL;
|
||||
IDispatch *pSession = NULL, *pDatabase = NULL, *pRecord = NULL, *pStringList = NULL, *pSumInfo = NULL;
|
||||
int iValue, iCount;
|
||||
|
||||
if (!pInstaller) return;
|
||||
|
@ -2677,6 +2696,18 @@ static void test_Installer(void)
|
|||
IDispatch_Release(pDatabase);
|
||||
}
|
||||
|
||||
/* Installer::SummaryInformation */
|
||||
hr = Installer_SummaryInformation(szPath, 0, &pSumInfo);
|
||||
ok(hr == S_OK, "Installer_SummaryInformation failed, hresult 0x%08x\n", hr);
|
||||
if (hr == S_OK)
|
||||
{
|
||||
test_SummaryInfo(pSumInfo, summary_info, sizeof(summary_info)/sizeof(msi_summary_info), TRUE);
|
||||
IDispatch_Release(pSumInfo);
|
||||
}
|
||||
|
||||
hr = Installer_SummaryInformation(NULL, 0, &pSumInfo);
|
||||
ok(hr == DISP_E_EXCEPTION, "Installer_SummaryInformation failed, hresult 0x%08x\n", hr);
|
||||
|
||||
/* Installer::RegistryValue */
|
||||
test_Installer_RegistryValue();
|
||||
|
||||
|
|
|
@ -1110,10 +1110,16 @@ static const char vp_custom_action_dat[] =
|
|||
"CustomAction\tAction\n"
|
||||
"TestPrimaryVolumePath0\t19\t\tPrimaryVolumePath set before CostFinalize\t\n"
|
||||
"TestPrimaryVolumeSpaceAvailable0\t19\t\tPrimaryVolumeSpaceAvailable set before CostFinalize\t\n"
|
||||
"TestPrimaryVolumeSpaceRequired0\t19\t\tPrimaryVolumeSpaceRequired set before CostFinalize\t\n"
|
||||
"TestPrimaryVolumeSpaceRemaining0\t19\t\tPrimaryVolumeSpaceRemaining set before CostFinalize\t\n"
|
||||
"TestPrimaryVolumePath1\t19\t\tPrimaryVolumePath set before InstallValidate\t\n"
|
||||
"TestPrimaryVolumeSpaceAvailable1\t19\t\tPrimaryVolumeSpaceAvailable not set before InstallValidate\t\n"
|
||||
"TestPrimaryVolumeSpaceRequired1\t19\t\tPrimaryVolumeSpaceRequired not set before InstallValidate\t\n"
|
||||
"TestPrimaryVolumeSpaceRemaining1\t19\t\tPrimaryVolumeSpaceRemaining not set before InstallValidate\t\n"
|
||||
"TestPrimaryVolumePath2\t19\t\tPrimaryVolumePath not set after InstallValidate\t\n"
|
||||
"TestPrimaryVolumeSpaceAvailable2\t19\t\tPrimaryVolumeSpaceAvailable not set after InstallValidate\t\n";
|
||||
"TestPrimaryVolumeSpaceAvailable2\t19\t\tPrimaryVolumeSpaceAvailable not set after InstallValidate\t\n"
|
||||
"TestPrimaryVolumeSpaceRequired2\t19\t\tPrimaryVolumeSpaceRequired not set after InstallValidate\t\n"
|
||||
"TestPrimaryVolumeSpaceRemaining2\t19\t\tPrimaryVolumeSpaceRemaining not set after InstallValidate\t\n";
|
||||
|
||||
static const char vp_install_exec_seq_dat[] =
|
||||
"Action\tCondition\tSequence\n"
|
||||
|
@ -1124,12 +1130,18 @@ static const char vp_install_exec_seq_dat[] =
|
|||
"FileCost\t\t300\n"
|
||||
"TestPrimaryVolumePath0\tPrimaryVolumePath AND NOT REMOVE\t400\n"
|
||||
"TestPrimaryVolumeSpaceAvailable0\tPrimaryVolumeSpaceAvailable AND NOT REMOVE\t500\n"
|
||||
"TestPrimaryVolumeSpaceRequired0\tPrimaryVolumeSpaceRequired AND NOT REMOVE\t510\n"
|
||||
"TestPrimaryVolumeSpaceRemaining0\tPrimaryVolumeSpaceRemaining AND NOT REMOVE\t520\n"
|
||||
"CostFinalize\t\t600\n"
|
||||
"TestPrimaryVolumePath1\tPrimaryVolumePath AND NOT REMOVE\t600\n"
|
||||
"TestPrimaryVolumeSpaceAvailable1\tNOT PrimaryVolumeSpaceAvailable AND NOT REMOVE\t800\n"
|
||||
"TestPrimaryVolumeSpaceRequired1\tNOT PrimaryVolumeSpaceRequired AND NOT REMOVE\t810\n"
|
||||
"TestPrimaryVolumeSpaceRemaining1\tNOT PrimaryVolumeSpaceRemaining AND NOT REMOVE\t820\n"
|
||||
"InstallValidate\t\t900\n"
|
||||
"TestPrimaryVolumePath2\tNOT PrimaryVolumePath AND NOT REMOVE\t1000\n"
|
||||
"TestPrimaryVolumeSpaceAvailable2\tNOT PrimaryVolumeSpaceAvailable AND NOT REMOVE\t1100\n"
|
||||
"TestPrimaryVolumeSpaceRequired2\tNOT PrimaryVolumeSpaceRequired AND NOT REMOVE\t1110\n"
|
||||
"TestPrimaryVolumeSpaceRemaining2\tNOT PrimaryVolumeSpaceRemaining AND NOT REMOVE\t1120\n"
|
||||
"InstallInitialize\t\t1200\n"
|
||||
"ProcessComponents\t\t1300\n"
|
||||
"RemoveFiles\t\t1400\n"
|
||||
|
@ -3157,6 +3169,11 @@ static void test_samesequence(void)
|
|||
MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
|
||||
|
||||
r = MsiInstallProductA(msifile, NULL);
|
||||
if (r == ERROR_INSTALL_FAILURE)
|
||||
{
|
||||
win_skip("unprivileged user?\n");
|
||||
goto error;
|
||||
}
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
|
||||
if (r == ERROR_SUCCESS)
|
||||
{
|
||||
|
@ -3165,6 +3182,8 @@ static void test_samesequence(void)
|
|||
ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
|
||||
ok(delete_pf("msitest", FALSE), "Directory not created\n");
|
||||
}
|
||||
|
||||
error:
|
||||
delete_cab_files();
|
||||
DeleteFileA(msifile);
|
||||
}
|
||||
|
@ -3179,6 +3198,12 @@ static void test_uiLevelFlags(void)
|
|||
MsiSetInternalUI(INSTALLUILEVEL_NONE | INSTALLUILEVEL_SOURCERESONLY, NULL);
|
||||
|
||||
r = MsiInstallProductA(msifile, NULL);
|
||||
if (r == ERROR_INSTALL_FAILURE)
|
||||
{
|
||||
win_skip("unprivileged user?\n");
|
||||
goto error;
|
||||
}
|
||||
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
|
||||
if (r == ERROR_SUCCESS)
|
||||
{
|
||||
|
@ -3187,6 +3212,8 @@ static void test_uiLevelFlags(void)
|
|||
ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
|
||||
ok(delete_pf("msitest", FALSE), "Directory not created\n");
|
||||
}
|
||||
|
||||
error:
|
||||
delete_cab_files();
|
||||
DeleteFileA(msifile);
|
||||
}
|
||||
|
@ -4687,6 +4714,16 @@ static void test_propcase(void)
|
|||
ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
|
||||
ok(delete_pf("msitest", FALSE), "Directory not created\n");
|
||||
|
||||
r = MsiInstallProductA(msifile, "Prop1=\"Copyright \"\"My Company\"\" 2015\" MyProp=42");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
|
||||
ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
|
||||
ok(delete_pf("msitest", FALSE), "Directory not created\n");
|
||||
|
||||
r = MsiInstallProductA(msifile, "Prop1=\"\"\"install.exe\"\" /Install\" MyProp=\"42\"");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
|
||||
ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
|
||||
ok(delete_pf("msitest", FALSE), "Directory not created\n");
|
||||
|
||||
error:
|
||||
DeleteFileA(msifile);
|
||||
DeleteFileA("msitest\\augustus");
|
||||
|
|
|
@ -48,6 +48,8 @@ static BOOL (WINAPI *pIsWow64Process)(HANDLE, PBOOL);
|
|||
|
||||
static INSTALLSTATE (WINAPI *pMsiGetComponentPathA)
|
||||
(LPCSTR, LPCSTR, LPSTR, DWORD*);
|
||||
static INSTALLSTATE (WINAPI *pMsiGetComponentPathExA)
|
||||
(LPCSTR, LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPSTR, LPDWORD);
|
||||
static INSTALLSTATE (WINAPI *pMsiProvideComponentA)
|
||||
(LPCSTR, LPCSTR, LPCSTR, DWORD, LPSTR, LPDWORD);
|
||||
static INSTALLSTATE (WINAPI *pMsiProvideComponentW)
|
||||
|
@ -90,6 +92,7 @@ static void init_functionpointers(void)
|
|||
trace("GetProcAddress(%s) failed\n", #func);
|
||||
|
||||
GET_PROC(hmsi, MsiGetComponentPathA)
|
||||
GET_PROC(hmsi, MsiGetComponentPathExA);
|
||||
GET_PROC(hmsi, MsiProvideComponentA)
|
||||
GET_PROC(hmsi, MsiProvideComponentW)
|
||||
GET_PROC(hmsi, MsiGetFileHashA)
|
||||
|
@ -4224,12 +4227,11 @@ static void test_MsiGetFileVersion(void)
|
|||
ok(versz == verchecksz, "Expected %d, got %d\n", verchecksz, versz);
|
||||
|
||||
/* pcchLangBuf not big enough */
|
||||
langsz = 3;
|
||||
langsz = 4;
|
||||
lstrcpyA(lang, "lang");
|
||||
r = MsiGetFileVersionA(path, NULL, NULL, lang, &langsz);
|
||||
ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r);
|
||||
ok(!strncmp(lang, langcheck, 2),
|
||||
"Expected first character of \"%s\", got \"%s\"\n", langcheck, lang);
|
||||
ok(lstrcmpA(lang, "lang"), "lang not set\n");
|
||||
ok(langsz >= langchecksz, "Expected %d >= %d\n", langsz, langchecksz);
|
||||
|
||||
/* pcchVersionBuf big enough, pcchLangBuf not big enough */
|
||||
|
@ -4250,7 +4252,7 @@ static void test_MsiGetFileVersion(void)
|
|||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
ok(versz == verchecksz, "Expected %d, got %d\n", verchecksz, versz);
|
||||
ok(langsz >= langchecksz && langsz < MAX_PATH, "Expected %d >= %d\n", langsz, langchecksz);
|
||||
ok(lstrcmpA(lang, "lang"), "lang buffer not modified\n");
|
||||
ok(strstr(lang, langcheck) != NULL, "expected %s in %s\n", langcheck, lang);
|
||||
|
||||
/* NULL pcchVersionBuf and pcchLangBuf */
|
||||
r = MsiGetFileVersionA(path, version, NULL, lang, NULL);
|
||||
|
@ -14432,7 +14434,8 @@ START_TEST(msi)
|
|||
test_lastusedsource();
|
||||
test_setpropertyfolder();
|
||||
test_sourcedir_props();
|
||||
test_concurrentinstall();
|
||||
if (pMsiGetComponentPathExA)
|
||||
test_concurrentinstall();
|
||||
test_command_line_parsing();
|
||||
|
||||
SetCurrentDirectoryA(prev_path);
|
||||
|
|
|
@ -3414,7 +3414,7 @@ static void test_states(void)
|
|||
|
||||
/* reinstall the product */
|
||||
r = MsiInstallProductA(msifile3, "REINSTALL=ALL");
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
ok(r == ERROR_SUCCESS || broken(r == ERROR_INSTALL_FAILURE) /* win2k3 */, "Expected ERROR_SUCCESS, got %d\n", r);
|
||||
|
||||
state = MsiQueryFeatureStateA("{7262AC98-EEBD-4364-8CE3-D654F6A425B9}", "five");
|
||||
ok(state == INSTALLSTATE_UNKNOWN, "state = %d\n", state);
|
||||
|
|
Loading…
Reference in a new issue