web-dev-qa-db-ja.com

WiXでのTARGETDIRおよびINSTALLDIRの使用法は何ですか?

従来のVisual Studio Deployment Projectインストーラーでは、TARGETDIRの値を指定したコマンドラインパラメーターを渡すことで、デフォルトのインストール場所を上書きできました(ほとんどのインストールはユーザーの操作なしで行われるため、コマンドラインの自動化は頻繁に使用されます)。しかし、私が得ている印象は、WiX(デフォルトでは)が別のものにTARGETDIRを使用することです。コマンドラインツールを更新してパラメーター名を変更することはできます(そうする予定です)が、それでも、手動で操作する必要がある既存のインストールはすべて残ります(簡単な作業ではありません)。

何も壊さずにTARGETDIRを指定してWiXパッケージのインストール場所を上書きする方法はありますか?

19
Adam Robinson

さらに掘り下げた後、私の以前の経験はVSDPROJ(場合によってはInstallShield)に固有の動作の結果であるように見えます。WiXはWindowsインストーラーに準拠しています。

私が this link で発見したように、TARGETDIRは実際には、使用可能な空き領域が最も多いドライブのルートを表すものと想定されています(複数あると仮定)。そのため、WiXプロジェクトにはProgram Filesなどのディレクトリがネストされています。VisualStudioは、実際には、このプロパティを上書きするカスタムアクションをフルインストールパスに追加します。

私は2つのことを実行することにより、私が望んでいたことを達成することができました。

  1. インストールするすべてのコンポーネントとコンポーネントグループをTARGETDIR(WiXがそこに配置したデフォルトのディレクトリ)ではなくINSTALLFOLDERに変更します。
  2. TARGETDIRプロパティの値をインストールパスに設定するカスタムアクションを追加します(コマンドラインから渡されなかった場合)。

そのために、これを<Product>タグの下に追加しました。

<CustomAction Id="SetTARGETDIR" Property="TARGETDIR" 
              Value="[ProgramFilesFolder][Manufacturer]\[ProductName]" 
              Execute="firstSequence" />

そして、これは<InstallExecuteSequence>タグ内にあります。

<Custom Action="SetTARGETDIR" Before="CostFinalize">TARGETDIR=""</Custom>
27
Adam Robinson