2012-03-22 6 views
2

WiXベースのインストールの一環として、レジストリ値として格納するプロパティJAVA_LOCの値を入力するようにユーザーに依頼する必要があります(これは、レジストリ値として作成するディレクトリではありません)。しかし、パブリッシュイベント= "SetTargetPath"を使用すると、リンカーはJAVA_LOCをコンポーネント階層のディレクトリとして宣言する必要があると言います。もし私がそうすれば、私はパスを大丈夫に記録することができます。ただし、後で「変更」インストールを実行すると、新しいパス値は無視され、強制的に作成されたJAVA_LOCディレクトリの場所にJAVA_LOCがリセットされることがわかります。WiX - インストールディレクトリ以外のパスを検証していますか?

ディレクトリにインストールされていないユーザーが入力したパスはどのように検証されますか?覚えて、私はちょうどそれをレジストリに格納しようとしている、本当にそれのためのディレクトリを作成しないでください。

デイブ

答えて

3

SetTargetPath制御イベントは、唯一の引数としてDirectoryテーブルの主キーを取ることができます。これを使用できるようにディレクトリを定義する必要があります。ディレクトリには、CreateFolderエントリおよび/またはFileリソースが必要です。私はあなたがこのディレクトリの下にレジストリデータでコンポーネントを入れ子にすることができたと思います、そして、それはディレクトリを作成せずにすべて動作するはずです。

+0

ありがとう、Christopher。それは知って良いです。はい、ディレクトリは作成されません。問題は最後の部分です:私は正しく1回目のインストール時にレジストリにJAVA_LOC値を取得します。次に「変更」インストールを実行してUI値を変更すると、実行するとログに新しい値が無視され、JAVA_LOCはディレクトリツリーのlocに設定され、実行中にレジストリに格納されます。ディレクトリ宣言には「安全」はありません。どのようにJAVA_LOCプロパティを無視しないようにすることができますか? –

+0

Ah。ディレクトリのプロパティは、自動的に安全とマークする必要はありません。問題は、ディレクトリを作成せずに何かをインストールしたためです。MSIはディレクトリの場所を覚えていません。何かがインストールされていれば、固定(不変)になります。 ControlEventを中継する代わりに(UIは修復中に起動しません)、CostInitializeの前にType51 CAを使用するか、CostFinalizeをインストールした後にType35 CAを使用してJAVA_LOCディレクトリプロパティにデフォルトのauthored値。 y –

+0

また、レジストリの値をCAの入力としてプロパティに戻す必要があります。詳細については、以下を参照してください。http://robmensching.com/blog/posts/2010/5/2/The-WiX-toolsets-Remember-Property-pattern –

関連する問題