msi: If the UserData product key exists, but the user product key doesn't, the product is absent.

This commit is contained in:
James Hawkins 2007-06-26 19:04:08 -07:00 committed by Alexandre Julliard
parent 3bf32f2700
commit 24ede2f9e6
2 changed files with 11 additions and 9 deletions

View File

@ -765,6 +765,7 @@ INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR szProduct)
INSTALLSTATE state = INSTALLSTATE_UNKNOWN; INSTALLSTATE state = INSTALLSTATE_UNKNOWN;
HKEY hkey = 0, props = 0; HKEY hkey = 0, props = 0;
DWORD sz; DWORD sz;
BOOL userkey_exists = FALSE;
static const int GUID_LEN = 38; static const int GUID_LEN = 38;
static const WCHAR szInstallProperties[] = { static const WCHAR szInstallProperties[] = {
@ -780,11 +781,12 @@ INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR szProduct)
return INSTALLSTATE_INVALIDARG; return INSTALLSTATE_INVALIDARG;
rc = MSIREG_OpenUserProductsKey(szProduct,&hkey,FALSE); rc = MSIREG_OpenUserProductsKey(szProduct,&hkey,FALSE);
if (rc != ERROR_SUCCESS) if (rc == ERROR_SUCCESS)
goto end; {
userkey_exists = TRUE;
state = INSTALLSTATE_ADVERTISED; state = INSTALLSTATE_ADVERTISED;
RegCloseKey(hkey); RegCloseKey(hkey);
}
rc = MSIREG_OpenUserDataProductKey(szProduct,&hkey,FALSE); rc = MSIREG_OpenUserDataProductKey(szProduct,&hkey,FALSE);
if (rc != ERROR_SUCCESS) if (rc != ERROR_SUCCESS)
@ -804,6 +806,9 @@ INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR szProduct)
else else
state = INSTALLSTATE_UNKNOWN; state = INSTALLSTATE_UNKNOWN;
if (state == INSTALLSTATE_DEFAULT && !userkey_exists)
state = INSTALLSTATE_ABSENT;
end: end:
RegCloseKey(props); RegCloseKey(props);
RegCloseKey(hkey); RegCloseKey(hkey);

View File

@ -439,10 +439,7 @@ static void test_MsiQueryProductState(void)
/* user product key does not exist */ /* user product key does not exist */
state = MsiQueryProductStateA(prodcode); state = MsiQueryProductStateA(prodcode);
todo_wine ok(state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
{
ok(state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
}
LocalFree(usersid); LocalFree(usersid);
RegDeleteValueA(props, "WindowsInstaller"); RegDeleteValueA(props, "WindowsInstaller");