2012-04-24 15 views
1

私の考えは、インストール時に変数に環境変数ZEN_HOMEの値を抽出して変数MyInstallDirに割り当て、それが設定されていない場合は、 ProgramFileFolderインストール時に環境変数msi(wxs)を抽出する

私が直面しているエラーは、コンパイル時にwxsがインストール時間ではなく値を検索していることです。

インストール時に値が抽出され、コンパイル時に値が抽出されないようにするにはどうすればよいですか?

<?if %ZEN_HOME% != "" ?> 
    <?define MyInstallDir = %ZEN_HOME% ?> 
<?else?> 
    <?define MyInstallDir="ProgramFilesFolder" ?> 
<?endif?> 

答えて

5

あなたがしようとしていることは、正しく言及したように、前処理中にコンパイル時に実行されます。インストール時にWiX変数を活用することはできません.WiXのカスタムコンセプトはWindows Installerにはまったく分かりません。

あなたの意図を正しく理解していれば、アプリケーションのインストールディレクトリを環境変数の値に設定することになります。それ以外の場合は、Program Filesの下のフォルダに戻ります。

次のようにしてアプローチできます。これは、代替となる

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLLOCATION" Name="MySetupProject"> 
     ... 
     </Directory> 
    </Directory> 
</Directory> 

: まず、このようなディレクトリ構造を定義します。その後、定義された環境変数があります場合にはINSTALLLOCATIONを設定するset-a-propertyカスタムアクションを定義します。

<SetProperty Id="INSTALLLOCATION" Value="[%ZEN_HOME]" After="CostFinalize">[%ZEN_HOME]</SetProperty> 

あなたがプロパティとしてディレクトリに取り組むことができるようにCostFinalize後にそれをスケジュールする必要があります。

+0

Ahh ..たくさんのことがあります。最後にwxsに既存の行があります。 ''それを削除しますか?私はmsiの概念、基本的にはLinuxの人にはかなり新しいですが、私たちの製品にはLinuxとWindowsのバージョンがあります。 – kingsmasher1

+0

また、 ' 'の後に追加したいのですか? – kingsmasher1

+0

さて、実際には ''要素は、set-a-propertyカスタムアクション定義( ''要素)のペアとインストールシーケンス( ''要素)へのスケジューリングの単なるショートカットです。私はあなたがあなたの既存のカスタムアクションSetInstallationDirectoryが最初に何をするのかを知っておくべきだと思って、後で必要な振る舞いに合わせるか、まったく別の目的のために新しいものを追加してください。 'SetInstallationDirectory'カスタムアクションの定義を見ずに理解するのは難しいです... –