msi: ACTION_RegisterProduct store all InstallProperties

Adam Strzelecki ono at java.pl
Sat Mar 1 16:02:10 CST 2008


Hello,

> I think you need to read through the implementation of
> MSI_GetProductInfo more closely and also read the MsiGetProductInfo
> tests in tests/msi.c and the test_publish:RegisterProduct tests in
> tests/install.c.

I think I did, and looking at the tests I see they are testing  
properties only at Uninstall key, and I think this is wrong, or at  
least incomplete, as quoted below:

>     res = RegOpenKeyA(uninstall, prodcode, &prodkey);
>     ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
>
>     CHECK_REG_DWORD(prodkey, "Version", 0x1010001);
>     CHECK_REG_DWORD(prodkey, "VersionMajor", 1);
>     CHECK_REG_DWORD(prodkey, "VersionMinor", 1);
>     CHECK_REG_DWORD(prodkey, "WindowsInstaller", 1);


While MSI_GetProductInfo is reading VersionMajor, VersionMinor, ...  
etc from InstallProperties key (from szInstallProperties_fmt or  
szInstaller_LocalSystemProductCodes_fmt), but NOT from Uninstall key  
as quotes below:

>     if (classes)
>         MSIREG_OpenLocalSystemProductKey(szProduct, &userdata, FALSE);
>     else
>         MSIREG_OpenInstallPropertiesKey(szProduct, &userdata, FALSE);
>
>     if (!lstrcmpW(szAttribute, INSTALLPROPERTY_HELPLINKW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_HELPTELEPHONEW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_INSTALLDATEW) ||
>         !lstrcmpW(szAttribute,  
> INSTALLPROPERTY_INSTALLEDPRODUCTNAMEW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_INSTALLLOCATIONW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_INSTALLSOURCEW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_LOCALPACKAGEW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_PUBLISHERW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_URLINFOABOUTW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_URLUPDATEINFOW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_VERSIONMINORW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_VERSIONMAJORW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_VERSIONSTRINGW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_PRODUCTIDW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_REGCOMPANYW) ||
>         !lstrcmpW(szAttribute, INSTALLPROPERTY_REGOWNERW))
>     {
>         if (!prodkey)
>         {
>             r = ERROR_UNKNOWN_PRODUCT;
>             goto done;
>         }
>
>         if (!userdata)
>             return ERROR_UNKNOWN_PROPERTY;
>
>         if (!lstrcmpW(szAttribute,  
> INSTALLPROPERTY_INSTALLEDPRODUCTNAMEW))
>             szAttribute = display_name;
>         else if (!lstrcmpW(szAttribute,  
> INSTALLPROPERTY_VERSIONSTRINGW))
>             szAttribute = display_version;
>
>         val = msi_reg_get_value(userdata, szAttribute, &type);
>         if (!val)
>             val = empty;
>     }


So it does not find any of those properties in the registry, because  
they're not written there by ACTION_RegisterProduct.
And fixing this is the intention of my patch.

Regards,
-- 
Adam Strzelecki |: nanoant.com :|




More information about the wine-devel mailing list