msi: Add more tests for the CompLocator part of the AppSearch action.

This commit is contained in:
James Hawkins 2008-10-13 03:57:17 -05:00 committed by Alexandre Julliard
parent 484add2220
commit 41c8bc8ae6
1 changed files with 421 additions and 105 deletions

View File

@ -32,6 +32,27 @@
static const char msifile[] = "winetest.msi";
char CURR_DIR[MAX_PATH];
static void get_user_sid(LPSTR *usersid)
{
HANDLE token;
BYTE buf[1024];
DWORD size;
PTOKEN_USER user;
HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*);
*usersid = NULL;
pConvertSidToStringSidA = (void *)GetProcAddress(hadvapi32, "ConvertSidToStringSidA");
if (!pConvertSidToStringSidA)
return;
OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token);
size = sizeof(buf);
GetTokenInformation(token, TokenUser, (void *)buf, size, &size);
user = (PTOKEN_USER)buf;
pConvertSidToStringSidA(user->User.Sid, usersid);
}
/* RegDeleteTreeW from dlls/advapi32/registry.c */
LSTATUS WINAPI package_RegDeleteTreeW(HKEY hKey, LPCWSTR lpszSubKey)
{
@ -96,6 +117,150 @@ cleanup:
return ret;
}
static BOOL squash_guid(LPCWSTR in, LPWSTR out)
{
DWORD i,n=1;
GUID guid;
if (FAILED(CLSIDFromString((LPOLESTR)in, &guid)))
return FALSE;
for(i=0; i<8; i++)
out[7-i] = in[n++];
n++;
for(i=0; i<4; i++)
out[11-i] = in[n++];
n++;
for(i=0; i<4; i++)
out[15-i] = in[n++];
n++;
for(i=0; i<2; i++)
{
out[17+i*2] = in[n++];
out[16+i*2] = in[n++];
}
n++;
for( ; i<8; i++)
{
out[17+i*2] = in[n++];
out[16+i*2] = in[n++];
}
out[32]=0;
return TRUE;
}
static void set_component_path(LPCSTR filename, MSIINSTALLCONTEXT context,
LPCSTR guid, LPSTR usersid, BOOL dir)
{
WCHAR guidW[MAX_PATH];
WCHAR squashedW[MAX_PATH];
CHAR squashed[MAX_PATH];
CHAR comppath[MAX_PATH];
CHAR prodpath[MAX_PATH];
CHAR path[MAX_PATH];
LPCSTR prod = NULL;
HKEY hkey;
MultiByteToWideChar(CP_ACP, 0, guid, -1, guidW, MAX_PATH);
squash_guid(guidW, squashedW);
WideCharToMultiByte(CP_ACP, 0, squashedW, -1, squashed, MAX_PATH, NULL, NULL);
if (context == MSIINSTALLCONTEXT_MACHINE)
{
prod = "3D0DAE300FACA1300AD792060BCDAA92";
sprintf(comppath,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\UserData\\S-1-5-18\\Components\\%s", squashed);
lstrcpyA(prodpath,
"SOFTWARE\\Classes\\Installer\\"
"Products\\3D0DAE300FACA1300AD792060BCDAA92");
}
else if (context == MSIINSTALLCONTEXT_USERUNMANAGED)
{
prod = "7D2F387510109040002000060BECB6AB";
sprintf(comppath,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
sprintf(prodpath,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\%s\\Installer\\Products\\"
"7D2F387510109040002000060BECB6AB", usersid);
}
else if (context == MSIINSTALLCONTEXT_USERMANAGED)
{
prod = "7D2F387510109040002000060BECB6AB";
sprintf(comppath,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
sprintf(prodpath,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\Managed\\%s\\Installer\\Products\\"
"7D2F387510109040002000060BECB6AB", usersid);
}
RegCreateKeyA(HKEY_LOCAL_MACHINE, comppath, &hkey);
lstrcpyA(path, CURR_DIR);
lstrcatA(path, "\\");
if (!dir) lstrcatA(path, filename);
RegSetValueExA(hkey, prod, 0, REG_SZ, (LPBYTE)path, lstrlenA(path));
RegCloseKey(hkey);
RegCreateKeyA(HKEY_LOCAL_MACHINE, prodpath, &hkey);
RegCloseKey(hkey);
}
static void delete_component_path(LPCSTR guid, MSIINSTALLCONTEXT context, LPSTR usersid)
{
WCHAR guidW[MAX_PATH];
WCHAR squashedW[MAX_PATH];
WCHAR substrW[MAX_PATH];
CHAR squashed[MAX_PATH];
CHAR comppath[MAX_PATH];
CHAR prodpath[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, guid, -1, guidW, MAX_PATH);
squash_guid(guidW, squashedW);
WideCharToMultiByte(CP_ACP, 0, squashedW, -1, squashed, MAX_PATH, NULL, NULL);
if (context == MSIINSTALLCONTEXT_MACHINE)
{
sprintf(comppath,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\UserData\\S-1-5-18\\Components\\%s", squashed);
lstrcpyA(prodpath,
"SOFTWARE\\Classes\\Installer\\"
"Products\\3D0DAE300FACA1300AD792060BCDAA92");
}
else if (context == MSIINSTALLCONTEXT_USERUNMANAGED)
{
sprintf(comppath,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
sprintf(prodpath,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\%s\\Installer\\Products\\"
"7D2F387510109040002000060BECB6AB", usersid);
}
else if (context == MSIINSTALLCONTEXT_USERMANAGED)
{
sprintf(comppath,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\UserData\\%s\\Components\\%s", usersid, squashed);
sprintf(prodpath,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\Managed\\%s\\Installer\\Products\\"
"7D2F387510109040002000060BECB6AB", usersid);
}
MultiByteToWideChar(CP_ACP, 0, comppath, -1, substrW, MAX_PATH);
package_RegDeleteTreeW(HKEY_LOCAL_MACHINE, substrW);
MultiByteToWideChar(CP_ACP, 0, prodpath, -1, substrW, MAX_PATH);
package_RegDeleteTreeW(HKEY_LOCAL_MACHINE, substrW);
}
static UINT do_query(MSIHANDLE hdb, const char *query, MSIHANDLE *phrec)
{
MSIHANDLE hview = 0;
@ -5597,6 +5762,229 @@ static void test_appsearch(void)
DeleteFileA(msifile);
}
static void test_appsearch_complocator(void)
{
MSIHANDLE hpkg, hdb;
CHAR path[MAX_PATH];
CHAR prop[MAX_PATH];
LPSTR usersid;
DWORD size;
UINT r;
get_user_sid(&usersid);
if (!usersid)
{
skip("ConvertSidToStringSidA is not available\n");
return;
}
create_test_file("FileName1");
create_test_file("FileName4");
set_component_path("FileName1", MSIINSTALLCONTEXT_MACHINE,
"{A8AE6692-96BA-4198-8399-145D7D1D0D0E}", NULL, FALSE);
create_test_file("FileName2");
set_component_path("FileName2", MSIINSTALLCONTEXT_USERUNMANAGED,
"{1D2CE6F3-E81C-4949-AB81-78D7DAD2AF2E}", usersid, FALSE);
create_test_file("FileName3");
set_component_path("FileName3", MSIINSTALLCONTEXT_USERMANAGED,
"{19E0B999-85F5-4973-A61B-DBE4D66ECB1D}", usersid, FALSE);
create_test_file("FileName5");
set_component_path("FileName5", MSIINSTALLCONTEXT_MACHINE,
"{F0CCA976-27A3-4808-9DDD-1A6FD50A0D5A}", NULL, TRUE);
create_test_file("FileName6");
set_component_path("FileName6", MSIINSTALLCONTEXT_MACHINE,
"{C0ECD96F-7898-4410-9667-194BD8C1B648}", NULL, TRUE);
create_test_file("FileName7");
set_component_path("FileName7", MSIINSTALLCONTEXT_MACHINE,
"{DB20F535-9C26-4127-9C2B-CC45A8B51DA1}", NULL, FALSE);
/* dir is FALSE, but we're pretending it's a directory */
set_component_path("IDontExist\\", MSIINSTALLCONTEXT_MACHINE,
"{91B7359B-07F2-4221-AA8D-DE102BB87A5F}", NULL, FALSE);
hdb = create_package_db();
ok(hdb, "Expected a valid database handle\n");
r = create_appsearch_table(hdb);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_appsearch_entry(hdb, "'SIGPROP1', 'NewSignature1'");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_appsearch_entry(hdb, "'SIGPROP2', 'NewSignature2'");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_appsearch_entry(hdb, "'SIGPROP3', 'NewSignature3'");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_appsearch_entry(hdb, "'SIGPROP4', 'NewSignature4'");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_appsearch_entry(hdb, "'SIGPROP5', 'NewSignature5'");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_appsearch_entry(hdb, "'SIGPROP6', 'NewSignature6'");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_appsearch_entry(hdb, "'SIGPROP7', 'NewSignature7'");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_appsearch_entry(hdb, "'SIGPROP8', 'NewSignature8'");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_appsearch_entry(hdb, "'SIGPROP9', 'NewSignature9'");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = create_complocator_table(hdb);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
/* published component, machine, file, signature, misdbLocatorTypeFile */
r = add_complocator_entry(hdb, "'NewSignature1', '{A8AE6692-96BA-4198-8399-145D7D1D0D0E}', 1");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
/* published component, user-unmanaged, file, signature, misdbLocatorTypeFile */
r = add_complocator_entry(hdb, "'NewSignature2', '{1D2CE6F3-E81C-4949-AB81-78D7DAD2AF2E}', 1");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
/* published component, user-managed, file, signature, misdbLocatorTypeFile */
r = add_complocator_entry(hdb, "'NewSignature3', '{19E0B999-85F5-4973-A61B-DBE4D66ECB1D}', 1");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
/* published component, machine, file, signature, misdbLocatorTypeDirectory */
r = add_complocator_entry(hdb, "'NewSignature4', '{A8AE6692-96BA-4198-8399-145D7D1D0D0E}', 0");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
/* published component, machine, dir, signature, misdbLocatorTypeDirectory */
r = add_complocator_entry(hdb, "'NewSignature5', '{F0CCA976-27A3-4808-9DDD-1A6FD50A0D5A}', 0");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
/* published component, machine, dir, no signature, misdbLocatorTypeDirectory */
r = add_complocator_entry(hdb, "'NewSignature6', '{C0ECD96F-7898-4410-9667-194BD8C1B648}', 0");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
/* published component, machine, file, no signature, misdbLocatorTypeFile */
r = add_complocator_entry(hdb, "'NewSignature7', '{DB20F535-9C26-4127-9C2B-CC45A8B51DA1}', 1");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
/* unpublished component, no signature, misdbLocatorTypeDir */
r = add_complocator_entry(hdb, "'NewSignature8', '{FB671D5B-5083-4048-90E0-481C48D8F3A5}', 0");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
/* published component, no signature, dir does not exist misdbLocatorTypeDir */
r = add_complocator_entry(hdb, "'NewSignature9', '{91B7359B-07F2-4221-AA8D-DE102BB87A5F}', 0");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = create_signature_table(hdb);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_signature_entry(hdb, "'NewSignature1', 'FileName1', '', '', '', '', '', '', ''");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_signature_entry(hdb, "'NewSignature2', 'FileName2', '', '', '', '', '', '', ''");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_signature_entry(hdb, "'NewSignature3', 'FileName3', '', '', '', '', '', '', ''");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_signature_entry(hdb, "'NewSignature4', 'FileName4', '', '', '', '', '', '', ''");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_signature_entry(hdb, "'NewSignature5', 'FileName5', '', '', '', '', '', '', ''");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
hpkg = package_from_db(hdb);
ok(hpkg, "Expected a valid package handle\n");
r = MsiSetPropertyA(hpkg, "SIGPROP8", "october");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = MsiDoAction(hpkg, "AppSearch");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
size = MAX_PATH;
sprintf(path, "%s\\FileName1", CURR_DIR);
r = MsiGetPropertyA(hpkg, "SIGPROP1", prop, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
size = MAX_PATH;
sprintf(path, "%s\\FileName2", CURR_DIR);
r = MsiGetPropertyA(hpkg, "SIGPROP2", prop, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
size = MAX_PATH;
sprintf(path, "%s\\FileName3", CURR_DIR);
r = MsiGetPropertyA(hpkg, "SIGPROP3", prop, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
size = MAX_PATH;
sprintf(path, "%s\\FileName4", CURR_DIR);
r = MsiGetPropertyA(hpkg, "SIGPROP4", prop, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, ""), "Expected \"\", got \"%s\"\n", prop);
size = MAX_PATH;
sprintf(path, "%s\\FileName5", CURR_DIR);
r = MsiGetPropertyA(hpkg, "SIGPROP5", prop, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
todo_wine
{
ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
}
size = MAX_PATH;
sprintf(path, "%s\\", CURR_DIR);
r = MsiGetPropertyA(hpkg, "SIGPROP6", prop, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
size = MAX_PATH;
sprintf(path, "%s\\", CURR_DIR);
r = MsiGetPropertyA(hpkg, "SIGPROP7", prop, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
r = MsiGetPropertyA(hpkg, "SIGPROP8", prop, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, "october"), "Expected \"october\", got \"%s\"\n", prop);
r = MsiGetPropertyA(hpkg, "SIGPROP9", prop, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, ""), "Expected \"\", got \"%s\"\n", prop);
delete_component_path("{A8AE6692-96BA-4198-8399-145D7D1D0D0E}",
MSIINSTALLCONTEXT_MACHINE, NULL);
delete_component_path("{1D2CE6F3-E81C-4949-AB81-78D7DAD2AF2E}",
MSIINSTALLCONTEXT_USERUNMANAGED, usersid);
delete_component_path("{19E0B999-85F5-4973-A61B-DBE4D66ECB1D}",
MSIINSTALLCONTEXT_USERMANAGED, usersid);
delete_component_path("{F0CCA976-27A3-4808-9DDD-1A6FD50A0D5A}",
MSIINSTALLCONTEXT_MACHINE, NULL);
delete_component_path("{C0ECD96F-7898-4410-9667-194BD8C1B648}",
MSIINSTALLCONTEXT_MACHINE, NULL);
delete_component_path("{DB20F535-9C26-4127-9C2B-CC45A8B51DA1}",
MSIINSTALLCONTEXT_MACHINE, NULL);
delete_component_path("{91B7359B-07F2-4221-AA8D-DE102BB87A5F}",
MSIINSTALLCONTEXT_MACHINE, NULL);
DeleteFileA("FileName1");
DeleteFileA("FileName2");
DeleteFileA("FileName3");
DeleteFileA("FileName4");
DeleteFileA("FileName5");
DeleteFileA("FileName6");
DeleteFileA("FileName7");
MsiCloseHandle(hpkg);
DeleteFileA(msifile);
}
static void test_featureparents(void)
{
MSIHANDLE hpkg;
@ -6214,95 +6602,6 @@ static void test_ccpsearch(void)
DeleteFileA(msifile);
}
static BOOL squash_guid(LPCWSTR in, LPWSTR out)
{
DWORD i,n=1;
GUID guid;
if (FAILED(CLSIDFromString((LPOLESTR)in, &guid)))
return FALSE;
for(i=0; i<8; i++)
out[7-i] = in[n++];
n++;
for(i=0; i<4; i++)
out[11-i] = in[n++];
n++;
for(i=0; i<4; i++)
out[15-i] = in[n++];
n++;
for(i=0; i<2; i++)
{
out[17+i*2] = in[n++];
out[16+i*2] = in[n++];
}
n++;
for( ; i<8; i++)
{
out[17+i*2] = in[n++];
out[16+i*2] = in[n++];
}
out[32]=0;
return TRUE;
}
static void set_component_path(LPCSTR filename, LPCSTR guid)
{
WCHAR guidW[MAX_PATH];
WCHAR squashedW[MAX_PATH];
CHAR squashed[MAX_PATH];
CHAR substr[MAX_PATH];
CHAR path[MAX_PATH];
HKEY hkey;
MultiByteToWideChar(CP_ACP, 0, guid, -1, guidW, MAX_PATH);
squash_guid(guidW, squashedW);
WideCharToMultiByte(CP_ACP, 0, squashedW, -1, squashed, MAX_PATH, NULL, NULL);
lstrcpyA(substr, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\UserData\\S-1-5-18\\Components\\");
lstrcatA(substr, squashed);
RegCreateKeyA(HKEY_LOCAL_MACHINE, substr, &hkey);
lstrcpyA(path, CURR_DIR);
lstrcatA(path, "\\");
lstrcatA(path, filename);
/* just using a random squashed product code */
RegSetValueExA(hkey, "7D2F387510109040002000060BECB6AB", 0,
REG_SZ, (LPBYTE)path, lstrlenA(path));
RegCloseKey(hkey);
lstrcpyA(substr, "SOFTWARE\\Classes\\Installer\\Products\\7D2F387510109040002000060BECB6AB");
RegCreateKeyA(HKEY_LOCAL_MACHINE, substr, &hkey);
}
static void delete_component_path(LPCSTR guid)
{
WCHAR guidW[MAX_PATH];
WCHAR squashedW[MAX_PATH];
WCHAR substrW[MAX_PATH];
CHAR squashed[MAX_PATH];
CHAR substr[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, guid, -1, guidW, MAX_PATH);
squash_guid(guidW, squashedW);
WideCharToMultiByte(CP_ACP, 0, squashedW, -1, squashed, MAX_PATH, NULL, NULL);
lstrcpyA(substr, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\"
"Installer\\UserData\\S-1-5-18\\Components\\");
lstrcatA(substr, squashed);
MultiByteToWideChar(CP_ACP, 0, substr, -1, substrW, MAX_PATH);
package_RegDeleteTreeW(HKEY_LOCAL_MACHINE, substrW);
lstrcpyA(substr, "SOFTWARE\\Classes\\Installer\\Products\\7D2F387510109040002000060BECB6AB");
MultiByteToWideChar(CP_ACP, 0, substr, -1, substrW, MAX_PATH);
package_RegDeleteTreeW(HKEY_LOCAL_MACHINE, substrW);
}
static void test_complocator(void)
{
MSIHANDLE hdb, hpkg;
@ -6465,14 +6764,22 @@ static void test_complocator(void)
CreateDirectoryA("olorotitan", NULL);
CreateDirectoryA("pantydraco", NULL);
set_component_path("abelisaurus", "{E3619EED-305A-418C-B9C7-F7D7377F0934}");
set_component_path("bactrosaurus", "{D56B688D-542F-42Ef-90FD-B6DA76EE8119}");
set_component_path("echinodon", "{A19E16C5-C75D-4699-8111-C4338C40C3CB}");
set_component_path("falcarius", "{17762FA1-A7AE-4CC6-8827-62873C35361D}");
set_component_path("iguanodon", "{8E0DA02E-F6A7-4A8F-B25D-6F564C492308}");
set_component_path("jobaria", "{243C22B1-8C51-4151-B9D1-1AE5265E079E}");
set_component_path("megaraptor", "{8B1034B7-BD5E-41ac-B52C-0105D3DFD74D}");
set_component_path("neosodon", "{0B499649-197A-48EF-93D2-AF1C17ED6E90}");
set_component_path("abelisaurus", MSIINSTALLCONTEXT_MACHINE,
"{E3619EED-305A-418C-B9C7-F7D7377F0934}", NULL, FALSE);
set_component_path("bactrosaurus", MSIINSTALLCONTEXT_MACHINE,
"{D56B688D-542F-42Ef-90FD-B6DA76EE8119}", NULL, FALSE);
set_component_path("echinodon", MSIINSTALLCONTEXT_MACHINE,
"{A19E16C5-C75D-4699-8111-C4338C40C3CB}", NULL, FALSE);
set_component_path("falcarius", MSIINSTALLCONTEXT_MACHINE,
"{17762FA1-A7AE-4CC6-8827-62873C35361D}", NULL, FALSE);
set_component_path("iguanodon", MSIINSTALLCONTEXT_MACHINE,
"{8E0DA02E-F6A7-4A8F-B25D-6F564C492308}", NULL, FALSE);
set_component_path("jobaria", MSIINSTALLCONTEXT_MACHINE,
"{243C22B1-8C51-4151-B9D1-1AE5265E079E}", NULL, FALSE);
set_component_path("megaraptor", MSIINSTALLCONTEXT_MACHINE,
"{8B1034B7-BD5E-41ac-B52C-0105D3DFD74D}", NULL, FALSE);
set_component_path("neosodon", MSIINSTALLCONTEXT_MACHINE,
"{0B499649-197A-48EF-93D2-AF1C17ED6E90}", NULL, FALSE);
r = MsiDoAction(hpkg, "AppSearch");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
@ -6590,14 +6897,22 @@ static void test_complocator(void)
RemoveDirectoryA("neosodon");
RemoveDirectoryA("olorotitan");
RemoveDirectoryA("pantydraco");
delete_component_path("{E3619EED-305A-418C-B9C7-F7D7377F0934}");
delete_component_path("{D56B688D-542F-42Ef-90FD-B6DA76EE8119}");
delete_component_path("{A19E16C5-C75D-4699-8111-C4338C40C3CB}");
delete_component_path("{17762FA1-A7AE-4CC6-8827-62873C35361D}");
delete_component_path("{8E0DA02E-F6A7-4A8F-B25D-6F564C492308}");
delete_component_path("{243C22B1-8C51-4151-B9D1-1AE5265E079E}");
delete_component_path("{8B1034B7-BD5E-41ac-B52C-0105D3DFD74D}");
delete_component_path("{0B499649-197A-48EF-93D2-AF1C17ED6E90}");
delete_component_path("{E3619EED-305A-418C-B9C7-F7D7377F0934}",
MSIINSTALLCONTEXT_MACHINE, NULL);
delete_component_path("{D56B688D-542F-42Ef-90FD-B6DA76EE8119}",
MSIINSTALLCONTEXT_MACHINE, NULL);
delete_component_path("{A19E16C5-C75D-4699-8111-C4338C40C3CB}",
MSIINSTALLCONTEXT_MACHINE, NULL);
delete_component_path("{17762FA1-A7AE-4CC6-8827-62873C35361D}",
MSIINSTALLCONTEXT_MACHINE, NULL);
delete_component_path("{8E0DA02E-F6A7-4A8F-B25D-6F564C492308}",
MSIINSTALLCONTEXT_MACHINE, NULL);
delete_component_path("{243C22B1-8C51-4151-B9D1-1AE5265E079E}",
MSIINSTALLCONTEXT_MACHINE, NULL);
delete_component_path("{8B1034B7-BD5E-41ac-B52C-0105D3DFD74D}",
MSIINSTALLCONTEXT_MACHINE, NULL);
delete_component_path("{0B499649-197A-48EF-93D2-AF1C17ED6E90}",
MSIINSTALLCONTEXT_MACHINE, NULL);
DeleteFileA(msifile);
}
@ -8050,6 +8365,7 @@ START_TEST(package)
test_getproperty();
test_removefiles();
test_appsearch();
test_appsearch_complocator();
test_featureparents();
test_installprops();
test_launchconditions();