msi: If the UserData product key exists, but the user product key doesn't, the product is absent.
This commit is contained in:
parent
3bf32f2700
commit
24ede2f9e6
|
@ -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);
|
||||||
|
|
|
@ -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");
|
||||||
|
|
Loading…
Reference in New Issue