[MSI_WINETEST] Sync with Wine Staging 1.7.55. CORE-10536

svn path=/trunk/; revision=69996
This commit is contained in:
Amine Khaldi 2015-11-21 16:45:05 +00:00
parent 9c595b7465
commit 86345c31fe
5 changed files with 209 additions and 21 deletions

View file

@ -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");

View file

@ -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();

View file

@ -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");

View file

@ -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);

View file

@ -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);