2012-04-28 7 views
3

特定の値に基づいてインストールに異なるdllを含めたいと思います。したがって、カスタムアクションを使用して設定されたプロパティに基づいてコンポーネントをロードしようとしています。WiXはCustomActionを使用して設定されたプロパティを確認できません

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

私は、このプロパティを19に変更されていることをMSIログファイルで見ることができる、しかしxyz.dll:カスタムアクションファイルで次に

... 
<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> 
... 

:WXSファイルで

インストールには含まれません。 PropDllVersionが条件レベルで設定されていないか、何か間違っているようです...まだ多くの場所でシーケンスを実行しようとしました...

私の財産の代わりにそれが動作する状態!

+2

なぜ私はこの質問に対して否定的な評価を得たのか分かりません。私がここに紹介した他のソリューションをすべて試したわけではありません。この質問への否定的な評価の理由を感謝します... – Samuel

答えて

3

private propertiesは(その名の小文字が含まれている)のInstallExecuteSequenceでそのデフォルト値を使用することに注意してください。たとえば、PROP_DLL_VERSIONのようにpublic propertyを使用する必要があります。

+0

私はこの昨日試して、それは動作しませんでした、おそらくカスタムアクションをコンパイルするのを忘れてしまった。今試して、それは動作します! – Samuel

2

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

さらに、CostInitializeとCostFinalizeアクションの後にFileCostアクションを呼び出します。

あなたはここにCostInitializeアクションのドキュメントをチェックアウトすることができます: http://msdn.microsoft.com/en-us/library/windows/desktop/aa368050%28v=vs.85%29.aspx

+0

ありがとうございますこの – Samuel

関連する問題