あなたがやろうとしていることは、正しく述べたように、前処理中にコンパイル時に実行されます。インストール時に 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の後にスケジュールする必要があります。