c# - 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." />
解决方案
<Product Id="*" Name="..." Version="" Manufacturer="..." UpgradeCode="...">
Auto-GUID:该
Id="*"
部分的意思是“自动生成产品代码”(使用*
自动生成的意思)。当您这样做时,您的设置的每次构建或重建都会获得一个新的产品代码。ProductVersion
如果您还更改了(前 3 位数字之一)并且您有一个MajorUpgrade element
例如您在源中使用的那个(顺便说一句,这是标准的)这相当于 MSI 术语的重大升级解决方案:如果您希望能够控制产品代码何时更改,您可以对产品代码进行硬编码。
注意:您可能在具有许多“重叠”安装的系统上处于肮脏状态。通过打开添加/删除程序小程序查找产品的重复安装:WinKey+ 点击R=>
appwiz.cpl
=>Enter。我会卸载所有实例,并且以后可能更喜欢在虚拟机上测试设置?(这也有助于发现隐藏的运行时依赖性——前提是在没有大多数运行时的情况下保存虚拟)。
链接:一些链接,其中包含有关主要升级的一些背景信息。
微星 SDK:
Flexera / Installshield:
推荐阅读
- security - 在 Micronaut 中 OAuth 登录后如何重定向回原始 URL
- asp.net-core - 我按照文档中的建议配置了 IIS ApplicationInitialization addinitializationPage='/warm-up'
- angular - 如何创建 Angular 的路由 pathMatch 无限循环?
- xpages - XPages:如何在 SSJS 中使用“搜索”属性获取 dominoView 数据源的文档集合
- javascript - 是否可以通过反应(钩子)在另一个上下文中使用上下文?
- mysql - 在终端中运行 mysql 命令时如何在 mac OS 中指定默认用户?
- java - Selenium:使用 XPath 按标题单击标签
- entity-framework - 将 BaseClass 的集合转换为几个 DerivedClasses - EF Core
- amazon-web-services - 如何将多个真实设备连接到 AWS IoT 中的单个影子
- jenkins - 如何在 Jenkins DSL 脚本中使用 dockerfile 代理