繁体   English   中英

Wix 32位和64位MSI不会相互卸载

[英]Wix 32-bit and 64-bit MSIs not uninstalling each other

我们目前提供32位.NET应用程序。 我们的下一个版本使用相同的WIX项目文件,使用SO上的标准技巧,构建了64位和32位MSI。

如果我将v1(32位)升级到v2(64位),则Wix将卸载旧版本(从Program Files(x86))并将v2放入Program Files。 正是我想要的。

如果随后我尝试安装32位版本的v2,它将与32位版本的v2一起安装32位版本,并且两者都位于各自的“程序文件”和“程序文件(x86)”文件夹中。

如果然后我重新运行v2的64位MSI,它将正确卸载32位版本并仅安装64位版本。

我的产品代码是动态生成的,并且两个MSI都具有相同的UpgradeCode

<Product Id="*" Name="Awesome Product" Language="1033" Version="$(var.Version)" 
         Manufacturer="Company, Inc." UpgradeCode="C7F99857-9999-4D36-AAA2-34B1D364BE19">

日志文件看起来没有什么不同,但是我在64到32位版本中看到的内容,这是无法按预期工作并且不会卸载64位软件的版本:

属性更改:修改ProgramFiles64Folder属性。 当前值为“ C:\\ Program Files \\”。 它的新值是:“ c:\\ Program Files(x86)\\”。

在消息后的某个时间发生这种情况:

行动:删除现有产品

所以我想知道是否以某种方式更新了将用于卸载软件包的路径,因此实际上并未删除任何内容?

我感觉自己已经搜索并阅读了每个相关的网页,博客文章和邮件列表消息,但是我愿意接受任何建议和参考。

编辑:我检查了FindRelatedProducts的32-> 64位升级日志。 在该文件中,我看到:

Action start 14:53:55: INSTALL.
MSI (c) (24:B4) [14:53:55:392]: UI Sequence table 'InstallUISequence' is present and populated.
MSI (c) (24:B4) [14:53:55:392]: Running UISequence
MSI (c) (24:B4) [14:53:55:392]: PROPERTY CHANGE: Adding EXECUTEACTION property. Its value is 'INSTALL'.
MSI (c) (24:B4) [14:53:55:392]: Doing action: FindRelatedProducts
MSI (c) (24:B4) [14:53:55:392]: Note: 1: 2205 2:  3: ActionText 
Action 14:53:55: FindRelatedProducts. Searching for related applications
Action start 14:53:55: FindRelatedProducts.
FindRelatedProducts: Found application: {85A5CC9D-3C1C-403D-B539-CA95B77B49ED}
MSI (c) (24:B4) [14:53:55:392]: PROPERTY CHANGE: Adding OLDPRODUCTFOUND property. Its value is '{85A5CC9D-3C1C-403D-B539-CA95B77B49ED}'.
Action ended 14:53:55: FindRelatedProducts. Return value 1.

然后,当我在64位版本之上安装32位版本时:

Action 15:02:37: INSTALL. 
Action start 15:02:37: INSTALL.
MSI (c) (EC:7C) [15:02:37:421]: UI Sequence table 'InstallUISequence' is present and populated.
MSI (c) (EC:7C) [15:02:37:421]: Running UISequence
MSI (c) (EC:7C) [15:02:37:421]: PROPERTY CHANGE: Adding EXECUTEACTION property. Its value is 'INSTALL'.
MSI (c) (EC:7C) [15:02:37:421]: Doing action: FindRelatedProducts
MSI (c) (EC:7C) [15:02:37:421]: Note: 1: 2205 2:  3: ActionText 
Action 15:02:37: FindRelatedProducts. Searching for related applications
Action start 15:02:37: FindRelatedProducts.
FindRelatedProducts: Found application: {3AF0BDBB-6F3B-4A2C-B8EC-42FB970A7C44}
MSI (c) (EC:7C) [15:02:37:422]: PROPERTY CHANGE: Adding OLDPRODUCTFOUND property. Its value is '{3AF0BDBB-6F3B-4A2C-B8EC-42FB970A7C44}'.
Action ended 15:02:37: FindRelatedProducts. Return value 1.

FindRelatedProducts可能会找到一些东西,但这并不意味着它将进行升级。 日志的其余部分将显示此信息,但是如果您在x86设置的升级元素中将OnlyDetect设置为Yes,则它将不会升级,仅是一个可能出问题的示例。 或者您没有RemoveExistingProducts动作或没有条件的动作。

您的RemoveExistingProducts也有可能(虽然可能不太可能)是在InstallFinalize之后(或在事务之外),然后如果x64卸载失败(例如,在InstallFinalize之后),它将回滚并保留两个产品。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM