5

我从一个旧的 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)

我究竟可以在哪里传递参数?

4

1 回答 1

6

您不能直接传递参数,因为为了使其工作,您的函数必须以正确的足迹导出。当你调用readConfigFiles你的自定义动作 dll 时,它应该有这样的足迹:

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>
于 2010-04-28T18:13:30.557 回答