0

私は Wix setupKit を持っています。それらに基づいていくつかのカスタム ダイアログが表示されるいくつかの機能があります。それらを組み合わせて新しい物件にしたいという条件がいくつかあります。例えば:

<Property Id="SERVERSETTINGSISNEEDED">
<![CDATA[(&Client = 3) OR (!Client = 3) OR (&CoreService = 3) OR (!CoreService = 3) OR (&ResourceService = 3) OR (!ResourceService = 3)]]>
</Property>

その後:

<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="ServersSettingsDlg" Order="1">SERVERSETTINGSISNEEDED</Publish>

しかし、それは機能せず、常にそのダイアログが表示されます。どんな助けでも大歓迎です。

4

1 に答える 1

2

WiX で要素を使用して MSI プロパティを定義すると、<Property>ビルド時に構築され、MSI パッケージがビルドされるまでにプロパティ テーブルにレコードが作成されます。一方、機能の状態は実行時、つまりパッケージのインストール時に解決されます。

したがって、ビルド時にランタイム値を参照しようとしますが、これは正しくありません。結果のプロパティが と評価される理由は説明できると思いますがtrue、それは問題ではありません。

あなたの質問を理解している限り、長い文字列を何度もコピー/貼り付けしないように、要素の条件部分を短くしたいと考えています。その場合、ここで MSI プロパティを使用する必要はありません。これは WiX プリプロセッサ機能で実現できます。

したがって、次のようにします。

  • 条件をプリプロセッサ変数として定義します。

<?define ServerSetingIsNeeded = "(&Client = 3) OR (!Client = 3) OR (&CoreService = 3) OR (!CoreService = 3) OR (&ResourceService = 3) OR (!ResourceService = 3)>"?>

  • 条件の代わりに変数を使用します。

<Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="ServersSettingsDlg" Order="1">$(var.ServerSetingIsNeeded)</Publish>

于 2013-01-09T15:01:50.450 に答える