web-dev-qa-db-ja.com

Wix-インストールフォルダーを正しく設定する

VS 2010を使用してWixによってインストールされるプログラムを作成していますが、product.wxsの準備はすでに整っています。

私のwxsファイルには、次のようなディレクトリ定義があります。

<SetDirectory Id="INSTALLFOLDER" Value="[WindowsVolume]Myapp" />
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="INSTALLFOLDER" Name="Myapp">
    <Directory Id="Myapp_Installer_Dir" Name="Myapp">
          <Directory Id="BIN" Name="Bin" />
          <Directory Id="ICONS" Name="Icons" />
    </Directory>
  </Directory>
</Directory>

そして、これらのファイルのインストール定義を入手しました:

<DirectoryRef Id="Myapp_Installer_Dir">
  <Component Id="INSTALLER_Myapp" Guid="{94F18477-8562-4004-BC6F-5629CC19E4CB}" >
    <File Source="$(var.Myapp.TargetPath)" KeyPath="yes"/>
  </Component>
</DirectoryRef>

<DirectoryRef Id="BIN">
  <Component Id="INSTALLER_Data" Guid="{545FB5DD-8A52-44D7-898E-7316E70A93F5}" >
    <File Source="$(var.Data.TargetPath)" KeyPath="yes"/>
  </Component>
    ...

そして、それはそのように続きます。 「ICONS」ディレクトリのファイルも定義されています。

WixUI_InstallDirダイアログセットも使用していますが、次の行も表示されます。

<Property Id="WIXUI_INSTALLDIR" Value="Myapp_Installer_Dir" />
<UIRef Id="WixUI_InstallDir" />

問題は、ユーザーがプログラムをインストールし、インストールフォルダーの値を変更すると、「Bin」および「Icons」のファイルが正しいパスにインストールされますが、Myappターゲットは、デフォルトのインストールパスとしての開始。

ユーザーが必要とする正しいフォルダーにbinファイルとアイコンファイルのみがインストールされ、myappターゲットはインストールされないのはなぜですか?

18
Yonatan Nir

私はついに問題を理解しました。しばらく検索した後、私はこのドキュメントに出会いました:

WixUI_InstallDirダイアログセット

関連する部分:「ディレクトリIDは、UIから実行シーケンスに渡して有効にする必要があるため、すべて大文字にする必要があります。」

そして、私のコードでわかるように、「Myapp_Installer_Dir」はこの基準を満たしていません。

「MYAPPINSTALLERDIR」に変更した後、すべてが機能しました。

36
Yonatan Nir

よくわかりませんが、これが起こったと思うことです。

SetDirectory要素を作成する場合、基本的に、MSIデータベースにディレクトリを設定するカスタムアクションを追加します。実行されるシーケンスを指定しない限り、デフォルトでbothになります。つまり、InstallUISequenceInstallExecuteSequenceの両方で実行されます。

現在、ユーザーがウィザードでインストールディレクトリを変更すると、これはUIシーケンスで発生します。明らかに、インストールが実行シーケンスに入ると、INSTALLFOLDERの値は指示どおり[WindowsVolume]Myappに設定されます。

だから、どういうわけかこれを作り直さなければならない。サイレントインストールにも留意してください-実行シーケンスのみがあります。

[〜#〜] update [〜#〜]持っているものの代わりに、次のようなものを試してください。

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="WindowsVolume">
    <Directory Id="INSTALLFOLDER" Name="Myapp">
      <Directory Id="BIN" Name="Bin" />
      <Directory Id="ICONS" Name="Icons" />
    </Directory>
  </Directory>
</Directory>

また、ユーザーがオプションでINSTALLFOLDERを変更できるようにします。

3
Yan Sklyarenko