开发者

WiX - Passing parameters to a CustomAction (DLL)

I've got a DLL from an old WiSE installer that i'm trying to get working in WiX, so i'm pretty sure the DLL works with MSI-based installers.

Here is my definition:

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

and usage:

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

My C++ function looks like this:

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

Wher开发者_如何学编程e exactly can I pass in parameters?


You can't pass parameters directly because in order for this to work, your function has to be exported with exactly the right footprint. When you call readConfigFiles in your custom action dll, it should have a footprint like this:

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

You can use the hInstaller parameter to read properties from the MSI. Use 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);
}

Then just make sure you set the property in your .wxs file:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜