WiX - 将参数传递给CustomAction(DLL)

时间:2010-04-28 18:06:26

标签: installer parameters wix custom-action

我从旧的WiSE安装程序获得了一个DLL,我正试图在WiX中工作,所以我很确定该DLL可以与基于MSI的安装程序一起使用。

这是我的定义:

<Binary Id="SetupDLL" SourceFile="../Tools/Setup.dll" />
<CustomAction Id="ReadConfigFiles" BinaryKey="SetupDLL" DllEntry="readConfigFiles" />

和用法:

<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="ReadConfigFiles" Order="3">1</Publish>

我的C ++函数如下所示:

extern "C" UINT __stdcall ReadConfigFiles(MSIHANDLE hInstall, CHAR * szDirectory)

我可以在哪里传递参数?

1 个答案:

答案 0 :(得分:5)

您无法直接传递参数,因为要使其工作,您的功能必须以恰当的足迹导出。当您在自定义操作dll中调用readConfigFiles时,它应该有这样的足迹:

extern "C" UINT __stdcall readConfigFiles(MSIHANDLE hInstaller);

您可以使用hInstaller参数从MSI中读取属性。使用MsiGetProperty()

HRESULT GetProperty(MSIHANDLE hInstaller, LPCWSTR property, LPWSTR value, DWORD cch_value) {
    UINT err = MsiGetProperty(hInstaller, property, value, &cch_value);
    return (err == ERROR_SUCCESS ? S_OK : E_FAIL);
}

然后确保在.wxs文件中设置属性:

<Property Id="YOUR-PROPERTY-NAME">your-property-value</Property>