2012-04-04 162 views
2

我已经看过Why doesn't my new Windows Installer file (MSI) install properly over an older version of the MSI? 但这并不能帮助我。安装(MSI)将无法正确安装在旧版本

我有一个由安装程序包(MSI)

最初的插件和安装项目在Visual Studio 2005中的解决方案做安装,现在转移到Visual Studio 2010中的程序(插件办公室)。 当我做一个新的MSI并尝试安装它的旧版本时,新版本不会工作,然后使用添加删除程序 - >修改安装 - >修复进行修复 新版本安装完美,如果我删除旧的版本第一。

这对我们来说重要的是,新的MSI能够顺利删除旧版本并安装新版本,因为它由几个用户没有电脑经验

的RemovePreviousVersion设置为True。我已将版本从3.1.1升级到4.0.0,并在该过程中接受了新的ProductCode。 在Orca中,我将Reinstallmode设置为amus,但似乎没有任何帮助。

谢谢!

回答

1

如果我理解正确,你说升级工程,如果运行新版本的修复?当两个软件包都有共享组件时,即包装组件的重复GUID时,可能会出现这种情况。最好的方法来跟踪这个问题是创建一个详细的安装日志,所以我们可以分析它。

在修复过程中,与旧版本没有冲突,因为它已被删除,并且软件包中的组件安装正确,这就是插件工作之后的原因。

你可以创建一个详细的日志,所以我们可以看看它吗?

+0

嗨。感谢您的答复。如果我为新版本运行修复,升级正常无误。我已经制作了两个安装的详细日志。它可以在这里下载http://download.ditmer.dk/klu/Installlogs.zip – 2012-04-04 11:27:04

+0

日志显示一个组件与以下GUID是由您的应用程序的两个版本共享:{1BB1F0AD-8476-42BE-A165-9116EEDCB560} 。我建议您为新版本的软件包生成一个新的GUID并再次测试升级。 – 2012-04-04 13:18:58

+0

发生了什么事情,这个组件被两个共享,新版本跳过了它的安装,但随后卸载旧版本是由于Windows Installer中的一个错误而删除了共享组件,所以你最终会以缺少资源。这就是为什么在维修之后,所有工作都正常。生成一个新的GUID应该解决问题。 – 2012-04-04 13:21:14

0

奇怪的是,第二个日志没有显示可见的问题,所以升级应该正确安装。要获得更多详细信息,我们需要在操作系统触发自动修复时创建的详细日志。要创建此日志,您需要激活全局日志记录,如下所述: http://support.microsoft.com/kb/2545723

+0

这里有一个详细的日志修复:download.ditmer.dk/klu/verboseLog.zip – 2012-04-11 13:06:57

0

我试图从日志中获取更多详细信息,但可以找到更多信息。但是,我发现了另一种检测修理原因的方法。要获取有关按需安装原因的更多信息,请打开事件查看器(“开始 - >运行”,“eventvwr.msc”),然后查看应用程序节点下的以下格式的“MsiInstaller”日志消息:

事件类型:警告 来源:MsiInstaller 事件ID:1001 描述: 检测产品的 '{000C1109-0000-0000-C000-000000000046}',特征 '实施例' 请求组件“{00030829过程中失败-0000-0000-C000-000000000046}'

消息和GUID当然会在您的机器上有所不同。然后,您可以检查项目中的GUID以查看哪个组件触发了修复。

0

通过使用Orca Tool编辑msi,它可能会解决您的问题。

首先,我通过在InstallValidate和InstallIncecuteSequence选项卡下的InstallInitialize之前设置RemoveExistingProducts的序列号来删除现有产品。

谢谢,Saurabh

0

你应该告诉我们更多。你正在交换版本号,产品,组件,升级和包代码吗?你在使用哪种软件?

通常,您在产品中保持升级代码一致。 您需要在升级表中指定包含旧/当前升级代码的版本号。

取决于你在哪里安排RemoveExistingProducts如果你保留组件代码,我可能是一些旧的组件不会被替换。

我安排事件后总是InstallInitialize

检查是否动作FindRelatedProducts被调用。

this Post中可以找到使用WIX的示例。