0

私は、製品のさまざまなフレーバーに使用される WIX MSI プロジェクトを持っているため、製品のフレーバー/タイプに基づいてさまざまなステートメントを実行し、すべてが期待どおりに機能しているように見えることを確認しています。しかし、フレーバーの1つを別の場所にインストールする必要があることが決定されました(実際には別の会社のインストールフォルダーに-アプリがGACされていないため)が、私は今、いくつかの「楽しい」試みをしていますこれを実装します。

次のようなディレクトリ構造があります。

<Directory Id="TARGETDIR" Name="SourceDir">
   <Directory Id="ProgramFilesFolder">
      <Directory Id="COMPANYFOLDER" Name="FirstCompany">
         <Directory Id="APPLICATIONFOLDER" Name="FirstProduct"  >

現状では問題ありません。Program Files\FirstCompany\FirstProduct にインストールされます。

しかし、1 または 2 の FLAVOR という PreProcessor 変数があります。それが 1 の場合は、上記のように構造にインストールしたいと思います。しかし、2 の場合、Program Files\SecondCompany\SecondProduct にインストールしたいと思います。

基本的に 2 の場合、実際には別の会社のインストール場所にインストールします。

これを達成するために、次のようなあらゆる種類のことを試しました。

<?if $(var.FLAVOUR)=1?>
    <SetDirectory Id="COMPANYFOLDER" Value="FirstCompany" Sequence="execute"/>
    <SetDirectory Id="APPLICATIONFOLDER" Value="FirstProduct" Sequence="execute"/>
<?else?>
    <SetDirectory Id="COMPANYFOLDER" Value="SecondCompany" Sequence="execute"/>
    <SetDirectory Id="APPLICATIONFOLDER" Value="SecondProduct" Sequence="execute"/>
<?endif?

これは、ディレクトリ構造がセットアップされた場所と同じフラグメントで行われましたが、これは機能しませんでした。

また試しました:

    <CustomAction Id="SetCompanyDirToFirst"
                  Directory="COMPANYFOLDER"
                  Value="FirstCompany" />

    <InstallExecuteSequence>
       <Custom Action="SetCompanyDirToFirst" Before="InstallFiles">$(var.FLAVOUR)=1</Custom>
       ....
    </InstallExecuteSequence>

これらのメソッドは正常にコンパイルされますが (btw Wix 3.6)、インストーラーを実行すると、「ネットワークの場所 XXXXXXXX にアクセスできませんでした」などのエラーが表示されます。ここで、XXXXXX は APPLICATIONFOLDER の値です。

私は Wix スキルの限界に達しました (それほど時間はかかりません)。

乾杯、

クリス。

4

1 に答える 1

1

<CustomAction>またはを使用し<SetDirectory>てディレクトリを新しいパスに設定する場合は、ディレクトリを単一のフラグメントだけでなく、完全なパスに設定する必要があります。

例えば:

<?if $(var.FLAVOUR) = 1 ?>
  <SetDirectory Id="APPLICATIONFOLDER" Value="[ProgramFilesFolder]FirstCompany\FirstProduct" Sequence="execute" />
<?else?>
  <SetDirectory Id="APPLICATIONFOLDER" Value="[ProgramFilesFolder]SecondCompany\SecondProduct" Sequence="execute" />
<?endif?>

APPLICATIONFOLDER ディレクトリにフル パスを設定しているため、COMPANYFOLDER ディレクトリを変更する必要はありません。

ただし、この方法でプリプロセッサを使用している場合は、カスタム アクションをまったく使用する必要はまったくありません。ビルド時にすべてを行うことができます。

<?if $(var.FLAVOUR) = 1 ?>
  <?define CompanyFolderName = "FirstCompany" ?>
  <?define ProductFolderName = "FirstProduct" ?>
<?else?>
  <?define CompanyFolderName = "SecondCompany" ?>
  <?define ProductFolderName = "SecondProduct" ?>
<?endif?>

<Directory Id="TARGETDIR" Name="SourceDir">
   <Directory Id="ProgramFilesFolder">
      <Directory Id="COMPANYFOLDER" Name="$(var.CompanyFolderName)">
         <Directory Id="APPLICATIONFOLDER" Name="$(var.ProductFolderName)">
           ....
于 2013-10-22T06:45:38.473 に答える