我最近负责一个新系统,它是一个用C#编写的 Windows应用程序,为其分发创建了一个安装程序( .MSI )文件。当我安装软件时,它安装正确,但在启动时崩溃。然后,如果我为应用程序运行.exe文件,则安装的软件将开始工作。
我的观察是 .EXE安装了 .MSI 文件所需的一些遗漏位。有没有办法可以找到 .MSI 文件中缺少哪些文件?
2014年8月9日更新 我找到 WER4A29.tmp.WERInternalMetadata.xml 文件,其中涉及 System.Net.WebException
-<ProblemSignatures>
<EventType>CLR20r3</EventType>
<Parameter0>test.exe</Parameter0>
<Parameter1>1.0.3.33</Parameter1>
<Parameter2>53dca4f6</Parameter2>
<Parameter3>System</Parameter3>
<Parameter4>4.0.30319.18408</Parameter4>
<Parameter5>52311185</Parameter5>
<Parameter6>21b0</Parameter6>
<Parameter7>1fb</Parameter7>
<Parameter8>System.Net.WebException</Parameter8>
</ProblemSignatures>
答案 0 :(得分:0)
首先run an admin install通过命令行(cmd.exe)从MSI中提取文件:
msiexec /a File.msi
然后检查解压缩的文件以确定是否存在执行配置任务的配置EXE文件。确定哪些配置文件(如果有)。例如INI或XML文件。检查每个用户/用户配置文件。
如果您没有工具查看MSI文件,请抓住Orca或安装trial version of a commercial packaging tool。您将需要它来查看MSI文件中发生的情况。如果列出自定义操作表的内容,可能会有关于发生了什么的线索。还要在Registry表中查看要进入注册表的每个用户数据。正确调试MSI需要很多领域知识,但是通过它来查看它也很有用。只需发布后续问题。我假设你也有 Wix源代码?
要调试应用程序启动,请使用Process Monitor( procmon.exe )来确定成功启动期间发生了什么。日志记录有点冗长,但有了标记,您可以缩小范围。 - 对于本机应用程序(Win32或非.NET),我也喜欢使用Dependency Walker( depends.exe )。它也可以用于.NET,但我发现它不太有用。 我不知道.NET目前最好的依赖扫描程序是什么。
如果手动调试失败,用于应用程序重新打包的几个工具可以扫描系统并确定完成某些操作之前和之后的状态,并将其捕获为差异列表。 高级安装程序的试用版应该可以执行此操作。通过一些技术见解,您应该能够识别差异图像所需的内容。
答案 1 :(得分:0)
.msi
文件是安装设置,它包含安装脚本和实际的可执行.exe
文件以及其他必需的dlls
和配置文件。
我认为问题在于如何创建设置。安装后启动应用程序时,它不执行环境配置等启动任务。
当你运行.exe
时,它会自行处理这些配置。
我建议重新访问安装文件.msi
文件及其生成脚本的测试。