如何找到.exe和.msi(安装程序)的内容之间的差异

本文关键字:之间 程序 安装 何找 exe msi | 更新日期: 2023-09-27 18:17:13

我最近负责一个新系统,它是一个用c#编写的windows应用程序,为其分发创建了一个安装程序(. msi )文件。当我安装软件时,它安装正确,但它在启动时崩溃。然后,如果我运行.exe文件一次应用程序,安装的软件开始工作。

我的观察是,. exe安装了一些缺失的位,这是所需要的。MSI 文件。是否有一种方法可以找到中缺少的文件。MSI文件?

UPDATE on 09-08-2014:我找到了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>

如何找到.exe和.msi(安装程序)的内容之间的差异

首先通过命令行(cmd.exe)运行admin install以从MSI中提取文件:

msiexec /a File.msi

然后检查提取的文件,以确定是否有执行配置任务的配置EXE文件。确定有哪些配置文件(如果有的话)。例如INI或XML文件。检查每个用户/用户配置文件。

如果您没有工具来查看MSI文件,请获取Orca或安装试用版的商业打包工具。您将需要这个来查看MSI文件内部发生了什么。如果您列出Custom Action表的内容,可能会有关于正在发生什么的线索。还要在Registry表中查找要进入注册中心的每个用户数据。正确调试MSI需要大量的领域知识,但像这样查看它也是有用的。只需发布后续问题。我假设你有Wix源代码吗?

调试应用程序启动使用进程监视器 (procmon.exe)来确定在成功启动期间发生了什么。日志记录有点冗长,但是使用标记可以缩小范围。-对于本机应用程序(Win32或非。net),我喜欢使用Dependency Walker ( dependencies .exe)。它也可以用于。net,但我发现它没有那么有用。我不知道目前。net最好的依赖扫描器是什么

如果手动调试失败,用于应用程序重新打包的几个工具能够扫描系统并确定执行某些操作之前和之后的状态,并将其捕获为差异列表。高级安装程序的试用版应该能够做到这一点。通过一些技术洞察力,您应该能够从diff图像中识别出所需的内容。

.msi文件是安装设置,它包括安装脚本和实际可执行的.exe文件以及其他所需的dlls和配置文件。

我认为问题在于如何创建设置。当您在安装后启动应用程序时,它不会执行启动任务,如环境配置。

当您运行.exe时,它会自行处理这些配置。

我建议重新测试设置文件.msi文件及其生成脚本。