当我尝试安装使用WiX构建的升级时,我收到错误“指定的帐户已存在”,是的,我已阅读Windows msi: error 1316: the specified account already exists
我对各种GUID在WiX项目文件中的作用感到困惑。
以前,我已经发布了ver。 5.4.35我的课程; Product.wxs
文件创建了一个MSI并包含以下指令:
<Product Id="4DF780D3-60EC-43D3-A537-8484FE03B793"
Version="5.4.35"
UpgradeCode="A2F60910-A7FC-4B96-9375-EFBED25CC826">
Burner使用以下Bundle.wxs
文件从MSI创建了一个EXE:
<Bundle Version="5.4.35"
UpgradeCode="0694ce56-8095-450c-9859-881c0c9d56f7">
我发布了新版本6.0.6,除了版本之外什么也没做。新的Product.wxs
是:
<Product Id="4DF780D3-60EC-43D3-A537-8484FE03B793" Same
Version="6.0.6"
UpgradeCode="A2F60910-A7FC-4B96-9375-EFBED25CC826"> Same
而Bundle.wxs
是:
<Bundle Version="6.0.6"
UpgradeCode="0694ce56-8095-450c-9859-881c0c9d56f7"> Same
用户报告说在旧版本之上安装新版本失败,“修复”不起作用。他们必须完全卸载旧版本,并安装新版本,这很不方便。
安装程序确实包含一些自定义操作。没有组件或其他GUID。
我的问题:我应该更改什么以确保升级正常并且没有错误?
答案 0 :(得分:3)
看看这是否有帮助:
ProductCode是指示系统上已安装此产品的guid。您不能安装两次相同的产品(严格来说,在相同的上下文中,例如每台机器)。根据定义,该产品已经安装,因此尝试重新安装它会导致(通常)维护模式修复操作。除非您的自定义操作具有适当的条件,否则它们将再次运行 - 如果在安装其拥有组件时运行自定义操作,则在组件作为修复的一部分重新安装时它将再次运行,因此它将尝试创建用户再次。
因此,主要升级需要新的ProductCode,因为您现在有一个新的完整产品安装,如果有的话,恰好会删除旧版本的产品。
UpgradeCode guid是产品系列属性。当您运送Product 2012,Product 2013,Product 2015,其中每个替换旧版本时,他们将使用相同的UpgradeCode,因为它用于搜索那些早期产品并进行升级。
主要升级还要求ProductVersion以前3位数递增,具有新的PackageCode(通常是自动的)并且仅升级相同的上下文(例如,每台机器将升级每台机器但不会按用户安装升级)。
此外,捆绑代码是在MSI方法上建模的,但未连接。我们的想法是捆绑包具有相同的体系结构 - 他们需要检测当前的体系结构并升级旧体系结构,因此它们也使用升级和产品代码,
在您的情况下,您正在尝试安装相同的ProductCode,这不是创建主要升级的良好开端。
我认为bundle会生成MSI活动的详细日志,因此它们非常有用。
答案 1 :(得分:2)
Product.Id
是不同版本之间的标识符。它或多或少都是这样的:
解决方案是更改新版本的Product.Id
。在我的项目中,我使用Product Id="*"
,因为在我的情况下,版本会在每次构建时更新。