我有一个类似的问题,如 forki23,通过在升级期间使用 Wix 来不覆盖配置文件。我有一个配置文件,在升级过程中不应被覆盖,但在卸载过程中应将其删除。但是,我找到的每个解决方案都会破坏其他东西。
如果我设置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:配置文件是机器范围的配置,应该适用于所有用户。
注 B:我使用的是 WiX 3.7,目标平台是 Windows 7 和 8。