Installation msi正在回滚且未记录任何错误

Installation msi正在回滚且未记录任何错误,installation,webserver,windows-installer,Installation,Webserver,Windows Installer,在windows 2008 web服务器上安装msi时遇到问题。与先前成功安装的msi完全相同。msi用于我创建并安装到IIS中的.net 4.0 web应用程序 发生的情况是,msi似乎正在正确安装,并且它在进度条上达到了剩余的0秒,然后突然开始回滚。我在事件查看器中查看了有关这方面的信息,但没有任何信息出现在那里,以帮助了解问题的根源 由于之前安装的msi没有问题,我相信问题可能与服务器的更改有关,而不是与msi有关 有没有人曾经经历过这种情况,或者对我在哪里可以找到更多关于msi安装程序为

在windows 2008 web服务器上安装msi时遇到问题。与先前成功安装的msi完全相同。msi用于我创建并安装到IIS中的.net 4.0 web应用程序

发生的情况是,msi似乎正在正确安装,并且它在进度条上达到了剩余的0秒,然后突然开始回滚。我在事件查看器中查看了有关这方面的信息,但没有任何信息出现在那里,以帮助了解问题的根源

由于之前安装的msi没有问题,我相信问题可能与服务器的更改有关,而不是与msi有关

有没有人曾经经历过这种情况,或者对我在哪里可以找到更多关于msi安装程序为什么要回滚的信息有过想法


好的,我在Bogdan Mitrache reply的帮助下做的是比较成功服务器和导致问题的服务器的日志,这是我发现错误发生的部分:

FAILED: -2147024864
FAILED: -2147024864
Custom Action failed with code: '32'
Custom Action failed with code: '32'
Custom Action completed with return code: '32'
Info 1903. Scheduling reboot operation: Deleting file << root directory >>\TBD2D0E.tmp. Must reboot to complete operation.
Info 1903. Scheduling reboot operation: Deleting file << root directory >>\TBD2ED3.tmp. Must reboot to complete operation.
Info 1903. Scheduling reboot operation: Deleting file << root directory >>\TBD2F41.tmp. Must reboot to complete operation.

我已经在互联网上搜索过了,但是我没有找到具体的原因来解释为什么会发生上述情况。任何人都有关于上述内容的详细信息,或者我可以在哪里查看?

了解MSI包失败原因的最佳方法是使用以下命令行创建详细日志:msiexec/i“MSI path”/L*V“debug.log”
日志应包含有关回滚原因的更多详细信息。正如您所怀疑的,您可能有一个重复的IIS网站/应用程序与包冲突。

您应该使用带有快照的虚拟机来排除对环境的更改和对安装程序的更改。您当然应该记录并读取windows installer日志。

日志中提到的返回代码表示:“该进程无法访问该文件,因为它正被另一个进程使用。”。当需要更新的文件当前正在使用时,Windows Installer会自动包含重新启动消息

根据Windows Installer标准,自定义操作的返回码必须为0,才能将其视为已成功执行。任何与0不同的返回代码都被视为失败


您应该做的是在安装开始时添加另一个自定义操作,该操作将停止可能使用软件包更新的资源的任何服务/应用程序。

我有这个日志,由于它的大小相当大,我应该在其中查找什么?如果您搜索,通常很容易在日志中找到错误“返回值3”。成功的操作具有“返回值1”“留言。这里有更多关于如何阅读冗长日志的细节:谢谢你的帮助,我已经更新了我从你所概述的信息中得到的问题,你能看看我的下一步是什么吗?谢谢。这真是个好主意,可能正是我需要包括的。因此,第一步是停止任何可能使用包更新的资源的服务/应用程序。所有资源都应该在一个文件夹中。问题是,我如何做到这一点?这里是讨论这个话题的线索:再次感谢你们。我目前正在关注这个问题。有没有办法知道另一个进程正在使用哪个文件?从日志上看,这似乎并不明显,而且由于msi安装了大量文件,因此很难跟踪。此外,我在哪里可以找到返回代码到错误描述映射的列表?eg 32=该进程无法访问该文件,因为另一进程正在使用该文件。我在网上找不到它,我用的是“Visual C++错误查找”工具。详情如下:
Return value 3.