首页 > 解决方案 > Wix Installer 应用程序在运行两次并卸载应用程序时不会安装

问题描述

我用 gui 写了一个简单的 wix 安装程序,它安装得很好。但是当我第二次运行相同的 .msi 文件时,它会带我完成 gui 中的正常安装过程,但最后会卸载我的应用程序。然后,如果我第三次运行相同的 .msi 文件,安装程序仍然会正常通过安装 gui,但最终会执行“卸载”。

我不明白为什么它不像其他所有安装程序那样运行并优雅地处理安装和卸载。

这是我的产品 xml 的一部分

 <Product Id="*" Language="1033" Codepage="1252" Name="..." 
       Version="$(var.ProductVersion)" Manufacturer="..." UpgradeCode="BDF9E310-5897-48D4-AB08-889D405F9X56">

<Package InstallerVersion="300" Platform="x64" Compressed="yes" InstallScope="perMachine" Manufacturer="..." 
         Comments="..." Description="..." Keywords="..."/>

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

标签: c#wixwix3.5wix3wix3.7

解决方案


<Product Id="*" Name="..."  Version="" Manufacturer="..." UpgradeCode="...">

Auto-GUID:该Id="*"部分的意思是“自动生成产品代码”(使用*自动生成的意思)。当您这样做时,您的设置的每次构建或重建都会获得一个新的产品代码。ProductVersion如果您还更改了(前 3 位数字之一)并且您有一个MajorUpgrade element例如您在源中使用的那个(顺便说一句,这是标准的)这相当于 MSI 术语的重大升级

解决方案:如果您希望能够控制产品代码何时更改,您可以对产品代码进行硬编码。


注意:您可能在具有许多“重叠”安装的系统上处于肮脏状态。通过打开添加/删除程序小程序查找产品的重复安装:WinKey+ 点击R=>appwiz.cpl=>Enter。我会卸载所有实例,并且以后可能更喜欢在虚拟机上测试设置?(这也有助于发现隐藏的运行时依赖性——前提是在没有大多数运行时的情况下保存虚拟)。


链接:一些链接,其中包含有关主要升级的一些背景信息。

微星 SDK

Flexera / Installshield


推荐阅读