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ターゲットはインストールされないのはなぜですか?
私はついに問題を理解しました。しばらく検索した後、私はこのドキュメントに出会いました:
関連する部分:「ディレクトリIDは、UIから実行シーケンスに渡して有効にする必要があるため、すべて大文字にする必要があります。」
そして、私のコードでわかるように、「Myapp_Installer_Dir」はこの基準を満たしていません。
「MYAPPINSTALLERDIR」に変更した後、すべてが機能しました。
よくわかりませんが、これが起こったと思うことです。
SetDirectory
要素を作成する場合、基本的に、MSIデータベースにディレクトリを設定するカスタムアクションを追加します。実行されるシーケンスを指定しない限り、デフォルトでboth
になります。つまり、InstallUISequence
とInstallExecuteSequence
の両方で実行されます。
現在、ユーザーがウィザードでインストールディレクトリを変更すると、これは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
を変更できるようにします。