2011-08-11 21 views
0

WiX first timer here。WiX:条件付き内部テキストが正しく評価されていない

WiXを使用して私の製品のインストーラをビルドしていますが、インストールを続行する前にMSMQがインストールされていることを確認しています。this SO answerに従ってください。私はこのように定義された条件要素を、使用しています:

<Condition Message="MSMQ must be installed in order to proceed."> 
    <![CDATA[MSMQ_INSTALLED<>"false"]]> 
    </Condition> 

私の財産とRegistrySearchは、次のようになります。

<Property Id="MSMQ_INSTALLED" Value="false" Secure="yes"> 
    <RegistrySearch Id="Msmq.RS" 
        Root="HKLM" 
        Key="SOFTWARE\Microsoft\MSMQ" 
        Name="Values" 
        Type="raw"/> 
    </Property> 

しかし、それは適切に評価しません。レジストリキーが存在するかどうかにかかわらず、インストールはメッセージと共に停止します。だから私の質問は:

  1. 私は条件要素を正しく使っていますか?
  2. 私は評価で間違って定義したことはありますか?

さらにテストすると、検索するレジストリキーに関係なく、MSMQ_INSTALLEDプロパティに「1:0 2:」という値が含まれていることがわかりました。

EDIT:Condition要素はProduct要素内に存在します。それは重要な区別であるas the Condition element is overloadedです。

EDIT:CDATA指令を使用し、インナーコンディションロジックを反転するための条件を変更して、より正確に問題を反映させます。

+0

なぜこれが下落したのか分かりません。この投稿を明確にするか曖昧さをなくすことができれば、私にコメントを残してください。 – grefly

答えて

1

まあ、回答was on SO the whole time。どうやら、レジストリキーの検索はWiXのボックスからはサポートされていないので、カスタムアクションプロジェクトを作成し、バイナリタグを使用してMSIにインポートし、インストール中に適切な場所でカスタムアクションを実行します。私の場合、それはLaunchConditionsの前でした。

参考のため、コードは:(商品ノードの下のWiXにバイナリのインポート)

public class CustomActions 
{ 
    [CustomAction] 
    public static ActionResult CustomAction1(Session session) 
    { 
     session.Log("Begin CustomAction1"); 

     var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\MSMQ"); 
     session["MSMQ_INSTALLED"] = key == null ? "-1" : "1"; 

     return ActionResult.Success; 

    } 
} 

(カスタムアクションプロジェクトでのみクラス)

<Binary Id="WixCustomAction" SourceFile="C:\work\RelayMed\src\dev\WixCustomAction\bin\Debug\WixCustomAction.CA.dll"/> 
<CustomAction Id="CheckMsmq" BinaryKey="WixCustomAction" DllEntry="CustomAction1" Execute="immediate" Return="check"/> 

<InstallUISequence> 
    <Custom Action="CheckMsmq" 
      Before="LaunchConditions"/> 
</InstallUISequence> 

(LaunchConditions前にカスタムアクションの実行)

条件とプロパティは元の投稿と同じままです。 RegistrySearchは完全に削除されました。

EDIT:RegistrySearchタグの削除。

0

"HKLM \ SOFTWARE \ Microsoft \ MSMQ @ Valuesにリテラル値 'false'が指定されている場合、インストールは続行できます。

"MSMQ_INSTALLED"を使用して、レジストリ値で見つかった文字列を確認してください。

+0

ありがとう、投稿したロジックエラーを修正していました。 – grefly

+0

残念ながら、まだ同じ問題です。 – grefly

+0

上記のコメントを参照してください: "MSMQ_INSTALLED"を使用して、レジストリ値で見つかった文字列を確認してください。 MSIはすべての値を真とみなします。 –

関連する問題