3

特定の値に基づいて、異なる dll をインストールに含めたいと考えています。そのため、カスタム アクションを使用して設定されたプロパティに基づいてコンポーネントを読み込もうとしています。

wxs ファイル内:

...
<Property Id="PropDllVersion" Value="0" />
...
<CustomAction Id="CheckPropDllVersion" BinaryKey="CustomAction1.dll" DllEntry="GetPropVersion" Return="ignore" Execute="immediate"/>
...
<InstallExecuteSequence>
    <Custom Action="CheckPropDllVersion" After="ValidateProductID" />      
</InstallExecuteSequence>
...
  <Component Id="Test"
     Guid="B81F832D-2D96-4169-9BD0-8D77098FEC60">
    <Condition><![CDATA[PropDllVersion = "19"]]></Condition>
    <File Id="File15"
      Name="xyz.dll"
      Vital="yes"
      KeyPath="yes"
      AssemblyManifest="File5"
      AssemblyApplication="File5"
      Assembly=".net"
      DiskId="1" 
      />
  </Component>
...

次に、カスタム アクション ファイルで次のようにします。

[CustomAction]
        public static ActionResult GetPropVersion(Session session)
        {
    session["PropDllVersion"] = "19";
        }

msi ログ ファイルで、このプロパティが 19 に変更されていることを確認できますが、xyz.dll はインストールに含まれていません。PropDllVersion が条件レベルで設定されていないか、何か間違っているようです...他の多くの場所でシーケンスを試みましたが、まだ機能していません...

プロパティの代わりに条件でグローバル プロパティを使用すると、機能します。

4

2 に答える 2

3

プライベート プロパティ(名前に小文字が含まれる) は、InstallExecuteSequence でデフォルト値を使用することに注意してください。したがって、PROP_DLL_VERSION などのパブリック プロパティを使用する必要があります。

于 2012-04-30T06:13:18.980 に答える
2

他にどこでカスタムアクションをシーケンスしようとしましたか?CostInitializeアクションの前にシーケンスする必要があります。

また、CostInitializeおよびCostFinalizeアクションの後にFileCostアクションを呼び出します。

CostInitializeアクションのドキュメントは、次の場所で確認できます:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa368050%28v=vs.85%29.aspx

于 2012-04-29T08:32:29.497 に答える