1

私の考えは、環境変数の値を抽出し、インストール時ZEN_HOMEに変数に割り当て、設定されていない場合は、変数に他の値を設定することです。MyInstallDirProgramFileFolder

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

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

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

1 に答える 1

5

あなたがやろうとしていることは、正しく述べたように、前処理中にコンパイル時に実行されます。インストール時に WiX 変数を利用することはできません。これは完全に WiX カスタム コンセプトであり、Windows インストーラーは何も知りません。

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

次の方法でアプローチできます。まず、次のようなディレクトリ構造を定義します。

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

これはフォールバックとして機能します。後で、環境変数が定義されている場合に備えて、 set-a-propertyカスタム アクションを定義して INSTALLLOCATION を設定します。

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

ディレクトリをプロパティとしてアドレス指定できるようにするには、 CostFinalizeの後にスケジュールする必要があります。

于 2012-04-24T07:36:24.923 に答える