【发布时间】:2014-05-18 16:02:58
【问题描述】:
我有一个支持主要升级的 WiX 安装程序。我发现在某些特定的测试环境中,升级时的安装程序会删除现有未更改的组件。
这些(IIS web应用程序池、IIS网站等)组件都是这样安装的,在TARGETDIR下:
<Directory Id="TARGETDIR" Name="SourceDir">
<Component Id="myComponent" Guid="MY-GUID">
<iis:WebAppPool Id="ID" Name="MyWebAppPool" Identity="networkService" ManagedPipelineMode="classic" ManagedRuntimeVersion="v4.0"/>
</Component>
</Directory>
对于有问题的环境,升级时会删除应用程序池。 以这种方式编写升级:
<MajorUpgrade Schedule="afterInstallExecute" DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." AllowDowngrades ="no" />
在升级日志中,我看到以下条目:
MSI (s) (58:20) [11:22:58:433]:允许卸载共享 组件:{MY-GUID}。其他客户 存在,但安装到不同的位置
在未发现问题的环境中(即升级时未卸载组件),我看到以下日志条目:
MSI12cb8.LOG:9594:MSI (s) (10:EC) [09:36:37:068]:不允许 组件卸载:{MY-GUID} 因为另一个客户存在
我能想到的唯一解释是,对于问题环境,TARGETDIR 在初始安装和升级之间发生了变化。 According to Rob、TARGETDIR 设置为最大驱动器。如果系统上最大的驱动器(可用空间最多的驱动器?)在初始安装和升级之间发生变化,则组件的密钥路径将发生变化,从而导致组件在升级时被卸载。
问题
- 这个解释听起来正确吗?
- 如何解决此问题以升级现有产品安装?有没有办法在升级时将
TARGETDIR设置为与初始安装相同的值?
【问题讨论】:
标签: iis wix installation windows-installer