5

WiXで動作させようとしている古いWiSEインストーラーからDLLを取得しているので、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 に答える