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