2016-08-05 6 views
0

私は以下のようなC++カスタムアクション関数を持っています。この機能は、INiセクションからIniセクションを取得するための機能です。C++カスタムアクションへのパラメータ渡し

extern "C" LPSTR PASCAL EXPORT ReadFile(LPSTR IniFilename, LPSTR IniFIleSection, LPSTR IniKey, LPSTR DefaultValue) 
{ 

    static char MyValue[512]; 
    sprintf(sValue, "%s %s %s %s",IniFilename, IniFIleSection, IniKey, DefaultValue); 
    GetPrivateProfileString(IniFIleSection, IniKey, DefaultValue, MyValue, 512,IniFilename); 
    return (sValue); 

}

そして

<Binary Id="CustomCallId" SourceFile="CustomDllname.dll" /> 
<CustomAction Id="ReadValue" BinaryKey="CustomCallId" DllEntry="ReadFile"/> 

<InstallExecuteSequence> 
    <Custom Action="ReadValue" Sequence="71" /> 
</InstallExecuteSequence> 

以下に示すように私はのCustomActionのためのWiX defenitionを使用していますが、私はWIXカスタムコールからDLLにパラメータを渡す方法を確認していません。

答えて

1

Windowsインストーラはこれをサポートしていません。プロトタイプUINT __stdcall CustomAction(MSIHANDLE hInstall)を持つC++ DLLからのみ関数を呼び出すことができます。次に、この機能の実装ではMSIHANDLEを使用して、アクティブなインストールからプロパティにアクセスできます。

このDLLのコードを制御する場合、プロパティを読み取って元のReadValue関数を呼び出すヘルパー関数をエクスポートできます。別の方法として、その呼び出しをラップする他の方法を調べることができます。

+0

InstallShieldにはこのための良いパターンがあります。 (標準DLL)。 –

0

このタイプのカスタムアクションは、理想的にはデータ駆動型である必要があります。ここにC#の概念があります。基本的にC++と同じです。実際、MichaelU(InstallShield)は私のC#コードをC++コードに翻訳してくれました。

[INISearcher] INISearcher(一意の主キー) ファイル名[プロパティを使用することができるようにフォーマットタイプ] セクション キー:あなたが好きなテーブルを定義したいと思います

http://blog.deploymentengineering.com/2008/05/data-driven-cas-made-easy-with-dtf.html

DefaultData Property_

CAはこのテーブルにクエリを実行し、結果を繰り返し、FileNameをフォーマットしてINIを読み取り、次にs表にリストされているプロパティで結果を破棄します。

関連する問題