【发布时间】:2017-06-15 14:26:28
【问题描述】:
我的安装程序中有两种工作模式:
- 使用之前安装留下的配置文件
- 删除所有现有配置并改为使用默认配置
模式由安装程序的 WPF UI 中的复选框确定。如果选择了第二种模式,则运行 CustomAction,这会手动从磁盘中删除 configs 文件夹:
<InstallExecuteSequence>
<Custom Action="RemoveConfigsFolder" After="RemoveFolders" Overridable="yes">NOT Installed AND DELETESETTINGS=1</Custom>
</InstallExecuteSequence>
我正在使用 NeverOverwrite 属性:
<ComponentGroup Id="Configs" Directory="INSTALLDIR" >
<Component Id="Configs" Permanent="yes" NeverOverwrite="yes">
<File Id="main.config" Name="main.config" Source=".\Configs\main.config" KeyPath="yes" />
</Component>
</ComponentGroup>
在这种情况下第一种模式可以正常工作,但是当我尝试使用第二种模式时它会失败,并且所有配置都被删除并且在安装过程中不再创建。
在我研究这个问题的过程中,我想我已经找到了发生这种情况的原因:https://community.flexerasoftware.com/showthread.php?96157-The-truth-the-whole-truth-about-quot-Never-overwrite-quot-and-quot-Permanent-quot-files&p=156826#post156826
实际上这是一个 Windows Installer 问题。如果您记录卸载 您会注意到,在安装的早期,安装程序 决定不安装包含此文件的组件 因为它被标记为“从不覆盖”并且该文件的副本已经 存在于目标机器上。卸载发生在这之后 删除现有文件。这是因为安装程序决定 当启动“CostFinalize”操作时。此操作必须运行 在“RemoveFiles”操作之前。
但是我该如何解决呢?
【问题讨论】:
-
这是重大升级情况吗?如果是,计划在哪里进行?
标签: wix windows-installer