James Hawkins : msi: If the UserData product key exists, but the user product key doesn't, the product is absent.
Module: wine Branch: master Commit: 24ede2f9e602b24080f47134055f9a1e540f487c URL: http://source.winehq.org/git/wine.git/?a=commit;h=24ede2f9e602b24080f4713405... Author: James Hawkins <truiken(a)gmail.com> Date: Tue Jun 26 19:04:08 2007 -0700 msi: If the UserData product key exists, but the user product key doesn't, the product is absent. --- dlls/msi/msi.c | 15 ++++++++++----- dlls/msi/tests/msi.c | 5 +---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c index 497083e..5e20ce2 100644 --- a/dlls/msi/msi.c +++ b/dlls/msi/msi.c @@ -765,6 +765,7 @@ INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR szProduct) INSTALLSTATE state = INSTALLSTATE_UNKNOWN; HKEY hkey = 0, props = 0; DWORD sz; + BOOL userkey_exists = FALSE; static const int GUID_LEN = 38; static const WCHAR szInstallProperties[] = { @@ -780,11 +781,12 @@ INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR szProduct) return INSTALLSTATE_INVALIDARG; rc = MSIREG_OpenUserProductsKey(szProduct,&hkey,FALSE); - if (rc != ERROR_SUCCESS) - goto end; - - state = INSTALLSTATE_ADVERTISED; - RegCloseKey(hkey); + if (rc == ERROR_SUCCESS) + { + userkey_exists = TRUE; + state = INSTALLSTATE_ADVERTISED; + RegCloseKey(hkey); + } rc = MSIREG_OpenUserDataProductKey(szProduct,&hkey,FALSE); if (rc != ERROR_SUCCESS) @@ -804,6 +806,9 @@ INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR szProduct) else state = INSTALLSTATE_UNKNOWN; + if (state == INSTALLSTATE_DEFAULT && !userkey_exists) + state = INSTALLSTATE_ABSENT; + end: RegCloseKey(props); RegCloseKey(hkey); diff --git a/dlls/msi/tests/msi.c b/dlls/msi/tests/msi.c index 810992c..08b6620 100644 --- a/dlls/msi/tests/msi.c +++ b/dlls/msi/tests/msi.c @@ -439,10 +439,7 @@ static void test_MsiQueryProductState(void) /* user product key does not exist */ 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); RegDeleteValueA(props, "WindowsInstaller");
participants (1)
-
Alexandre Julliard