アップグレード中に構成ファイルを上書きしないようにすることで、forki23のような同様の問題があります。アップグレード中に上書きしてはならない構成ファイルがありますが、アンインストール中に削除する必要があります。しかし、私が見つけたすべての解決策は、何か他のものを壊します。
NoOverwrite=yesを設定し、RemoveExistingProducts を InstallFinalize に移動すると、構成ファイルは希望どおりに処理されます。ただし、この場合、何らかの理由でアップグレード中にショートカットが削除されます。InstallInitialize で RemoveExistingProducts をそのままにしておくと、構成ファイルは実際にはアップグレード中に削除されますが、ショートカットは存在します。
なぜこれが起こっているのですか?それを修正する方法はありますか?
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize" />
<!-- InstallInitialize causes config-file to disappear during upgrade -->
<!-- InstallFinalize causes shortcuts to disappear during upgrade -->
...
<Property Id="DISABLEADVTSHORTCUTS" Value="1" />
...
<Directory Id="INSTALLLOCATION" Name="MyApp">
<Component Id="MYAPP.EXE" DiskId="1" Guid="...">
<File Id="MYAPP.EXE" Name="MyApp.exe" Source="..." Vital="yes" KeyPath="yes">
<Shortcut Id="startmenuShortcut"
Directory="ProgramMenuDir"
Name="!(loc.ProductName)"
WorkingDirectory='INSTALLLOCATION'
Icon="Icon.ico"
IconIndex="0"
Advertise="yes" />
</File>
<RegistryValue Root="HKLM"
Name="InstallLocation"
Key="$(var.InstallLocationRegistryKey)"
Type="string"
Value="[INSTALLLOCATION]">
</RegistryValue>
</Component>
<Component Id="MYAPP.EXE.CONFIG" DiskId="1" Guid="..." NeverOverwrite="yes">
<File Id="MYAPP.EXE.CONFIG"
Name="MyApp.exe.config"
Source="..."
KeyPath="yes" />
</Component>
...
</Directory>
...
<Directory Id="ProgramMenuFolder">
<Directory Id="ProgramMenuDir" Name="!(loc.ProductPrefix)">
<Component Id="ProgramMenuDir" Guid="...">
<RegistryValue Root="HKCU" Key="SOFTWARE\MyApp"
Type="string" Value="[INSTALLLOCATION]" KeyPath="yes" />
<RemoveFolder Id="ProgramMenuDir" On="uninstall"/>
</Component>
</Directory>
</Directory>
注 A: config-file はマシン全体の構成であり、すべてのユーザーに適用する必要があります。
注 B: WiX 3.7 を使用しており、ターゲット プラットフォームは Windows 7 および 8 です。