2011-06-29 15 views
7

この質問を何度も聞いたことがありますが、答えはどれも私にとってはうまくいかないようです。私は明らかに何か初心者が欠けているが、それが何であるかを知ることができない!私はまだ数日間WiXを使い続けていたので、まだそれほど新しくはありません。インストール前にWiXチェックファイルが存在する

基本的には、既存の製品へのプラグインを構築しました。プラグインをインストールする前に、その製品がインストールされていることを確認します。私は最も簡単な方法は、メインの実行可能ファイルが正しいディレクトリにあることを確認することだと思います。

これまでの私の関連するコード:

<Property Id="FILEEXISTS"> 
    <DirectorySearch Id="CheckFileDir" Path="INSTALLDIR" Depth="0"> 
    <FileSearch Id="CheckFile" Name="main.exe" /> 
    </DirectorySearch> 
</Property> 

<Condition Message="File does exist.">NOT FILEEXISTS</Condition> 

INSTALLDIRはMAIN.EXEがあるべきディレクトリのIdで、ネストされたDirectoryタグで定義されています。

答えて

5

MSIダイアログを使用してインストールフォルダを設定する前に検索が実行されます。だから、このアプローチはあなたが望むように動作しません。

インストールフォルダ内のファイルを確認する場合は、DoActionコントロールイベントで実行されるUIカスタムアクションをお勧めします。このイベントは、フォルダ選択ダイアログの[次へ]ボタンによってトリガされます。

このための事前定義されたカスタムアクションはありません。カスタムコードでカスタムアクションを作成する必要があります。インストールハンドルを受け取るDLLまたはVBScriptである必要があります。ここで小さなチュートリアルを見つけることができます:http://www.codeproject.com/KB/install/msicustomaction.aspx

+1

良い点、コスミン!この場合、INSTALLDIRは、メインアプリケーションのインストール先にレジストリで検索する必要があります。 –

+0

はい、レジストリから古いインストールパスを取得することをお勧めします。 –

+0

こんにちは、ありがとう。なぜ今は理解しています。より完全な解決策を得るためにレジストリ検索に変更します。その間、私は@Pathを "[ProgramFilesFolder] Manufacturer/ProductFolder"に変更し、条件を "FILEEXISTS"ではなく "FILEEXISTS"に変更して動作させました。 – Chris

1

@PathのINSTALLDIRの前後に角括弧[]がないと思われます。また、@ Depth = 0は疑わしいと思われます。プレーン検索ではこの属性を省略すると、デフォルトで1になります。これは、通常、ディレクトリ内のファイルを探す必要があります。

あなたの質問に実際の質問は含まれていませんが、厳密にするのに役立ちます。エラーが発生しているかどうかを理解するのは難しいです。または、状況が正常に機能しません。

+0

申し訳ありませんが、その条件は機能しません。ファイル 'main.exe'が存在するかどうかに関わらず、アプリケーションは関係なくインストールされます。私は[]の有無にかかわらず@Pathを試してみましたが、@Depthを省略しようとしましたが、無駄にしませんでした。ファイルがなくてもディレクトリがまだ存在するかどうかは重要ですか? Cheers – Chris

+0

私はあなたが何を意味するのか分かりませんが、FILEEXISTSプロパティは、ファイルが見つかった場合にのみ設定されます。BTWは、FILEEXISTSプロパティが設定されているかどうかを調べるログファイルを調べます。値 –

関連する問題