首先,一些背景信息:
我的Windows软件的1.x版本连接到硬件平台A,并使用.msi安装脚本(使用VS2010和.vdproj文件创建)安装软件。
我的Windows软件的2.x版本与版本1.x类似,但v2.x软件仅连接到硬件平台B(第二代硬件)。该软件使用相同的.vdproj文件的更新版本安装,使用VS2013构建。
以上一切都很好,但问题是,由于软件的v2.x控制的硬件不同于v1.x,拥有平台A设备和平台B设备的用户都希望同时拥有v1和v2同时安装的软件,以及.msi文件目前不允许这样做。
具体来说,在安装v1.x时尝试安装v2.x会自动删除v1.x软件,并且在安装v2.x时尝试安装v1.x会导致安装中止,并显示错误对话框说"已经安装了较新版本的软件"。
我想做的是将我的软件的2.x版本与旧的v1.x版本完全取消关联,以便(就安装程序的逻辑而言)它们完全是不相关的项目。它们已经安装到不同的默认安装路径(例如" \ Program Files(x86)\ MyCompany \ MySoftware v1" vs" \ Program Files(x86)\ MyCompany \ MySoftware v2"),所以这不应该是一个问题,它只是.vdproj文件中的某些东西仍然保持两个项目相互关联。
我尝试更改" UpgradeCode"," PackageCode"和" ProductCode" v2.x .vdproj文件中的GUID有些不同,但似乎并没有帮助;安装我的软件的v2.x仍会导致自动卸载/删除v1.x安装,如果安装了v2.x,v1.x安装程序仍然会中止。
更熟悉.msi安装程序行为的人是否可以提示如何让它变得不那么聪明?
答案 0 :(得分:0)
为了记录,我发现了问题。
更改UpgradeCode值是实现我想要的行为所必需的,但由于软件构建过程的设置方式,在.vdproj文件中更改它是不够的 - 有还有一个在构建过程中使用的MyProgram.variables.wxi文件,它包含自己的UpgradeCode值副本。一旦我在两个地方更改了UpgradeCode,解除关联就成功了。