为什么我的安装程序会搜索另一个不存在的MSI?

时间:2016-02-22 14:59:51

标签: wix windows-installer windows-server-2012-r2 msiexec

我的安装程序最近在升级期间崩溃了。在放下文件后,它会显示一个框:

  

尝试从文件中读取时发生网络错误:   C:\用户\用户\应用程序数据\本地\温度\ 2 \ MyInstaller.msi

我确定此错误是正确的,因为我们从未发送过文件MyInstaller.msi。我发送Package.msi,使用自定义引导程序MyInstaller.exe引导它,然后使用MyInstaller.exe调用msiexec /i Package.msi

直到最近Package.msi开始失败而显然试图寻找MyInstaller.msi时,这种情况一直很有效。为什么会这样做? Wilogutl.exe只说"标准或自定义操作似乎失败了。"这不是很有帮助。

我仍然不确定为什么会这样,但我找到了一个可能相关的日志部分:

  

MSI(c)(D0:54)[09:03:23:868]:输入CMsiConfigurationManager :: SetLastUsedSource。

     

MSI(c)(D0:54)[09:03:23:869]:指定的来源已经在列表中。

     

MSI(c)(D0:54)[09:03:23:869]:用户政策价值' SearchOrder'是' nmu'

     

MSI(c)(D0:54)[09:03:23:869]:机器策略值' DisableBrowse'是0

     

MSI(c)(D0:54)[09:03:23:869]:机器政策价值' AllowLockdownBrowse'是0

     

MSI(c)(D0:54)[09:03:23:869]:允许添加新来源。

     

MSI(c)(D0:54)[09:03:23:869]:PROPERTY CHANGE:添加PackagecodeChanging属性。它的价值是' 1'。

     

MSI(c)(D0:54)[09:03:23:869]:从配置数据中检索的包名称:' MyInstaller.msi'

     

MSI(c)(D0:54)[09:03:23:869]:注意:1:2205 2:3:错误

     

MSI(c)(D0:54)[09:03:23:871]:注意:1:2262 2:AdminProperties 3:-2147287038

     

MSI(c)(D0:54)[09:03:23:871]:机器政策价值' DisableMsi'是1

     

MSI(c)(D0:54)[09:03:23:871]:机器政策价值' AlwaysInstallElevated'是0

另一个奇怪的是:添加/删除程序显示已安装旧版本,我的二进制文件确认了这一点。但是,如果我尝试直接为新版本运行MSI,则会收到错误消息:

  

此产品的另一个版本已安装。安装   这个版本无法继续......

在我的开发过程中,我尝试安装具有相同版本但不同包裹代码的MSI时,我经常收到此错误消息。但是,Orca说新的MSI绝对是更高版本。

2 个答案:

答案 0 :(得分:0)

关于您对同一版本但不同包裹代码的最新评论,该版本可能有些不相关。 ProductCode定义了产品已经安装,因此尝试使用相同的ProductCode(但是不同的版本)安装其他东西将导致该消息。 PackageCode很重要,但是大多数工具只是在每次构建时生成一个新工具,所以它通常不是问题。因此,如果您真的正在进行升级,那么您应该在前三个字段中的某处具有WiX主要升级元素和新的ProductCode AND ProductVersion增量。

如果这是在客户端系统上,他们是否可以安装其他产品?您是否安装了可能与其他产品共享的任何相当常见的项目(可能来自合并模块)?例如,如果您要安装具有中断共享的组件ID的共享文件(Crystal Reports,C ++ Dlls等),则可能会触发Windows尝试通过转到另一个MSI文件来解决共享版本问题。顺便提一下,当MSI安装使用"版本说谎时,这可能是一个常见问题。实际安装的文件的版本与MSI文件的文件表中的版本不同。此外,请查看Windows事件日志,应用程序,MsiInstaller条目,因为可能存在一个条目,其中列出了组件ID作为修复的触发器并从其包含的产品MSI文件中获取文件。

只是为了让事情变得更加混乱,禁用一个安装的禁用MSI策略(参见文档)。

答案 1 :(得分:0)

在我自己不了解的情况下,Windows会缓存最初用于安装产品的MSI的文件名。因此,当我运行旧版本时,我的引导程序将MSI卸载为MyInstaller.msi,并安装我的产品。

我最近更改了引导程序以将其卸载为Package.msi。现在,在这些神秘的条件下,Windows将文件名缓存为MyInstaller.msi,并且在运行Package.msi的过程中尝试返回不再存在的MyInstaller.msi

我不知道为什么会这样做或者如何让它停止但是我已经恢复了我的更改并且再次将我的MSI从引导程序中卸载为MyInstaller.msi