MSI 获取已安装属性值C++




我的 MSI 设置中有属性 MYPATH,我正在将一些组件安装到此路径。现在我想获取组件的安装路径。我使用以下代码:

INSTALLUILEVEL pervousUILevel = MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
MSIHANDLE handle = NULL;
MsiOpenProduct(productCode,&handle);
wchar_t myPath[2048];
DWORD dwBuffer = 2048;
MsiGetProductProperty(handle, L"MYPATH", myPath, &dwBuffer); 
MsiCloseHandle(handle);
MsiSetInternalUI(pervousUILevel, NULL);

但我仍然得到默认值"C:\MyDefaultPath"而不是"C:\我在安装过程中指定的路径"。我做错了什么?谢谢
编辑:
我发现代码:

wchar_t myPath[4096];
DWORD isBuffer = 4096;
MsiGetComponentPath(productCode, L"{component-guid}", myPath, &isBuffer);

还返回默认路径。

发生这种情况是因为您直接从 MSI 包中读取值。您需要在安装过程中获取属性值,将 MsiGetProperty API 方法与自定义操作结合使用。链接的示例适用于执行串行验证的自定义操作,您感兴趣的只是定义自定义操作的方式以及如何获取值,其余代码

不需要

最新更新