几周前,我公司的笔记本电脑开始出现一些奇怪的问题。我无法再启动 Microsoft Developer Web Server(通过 Visual Studio->Debug)。后来我发现我无法执行任何 .NET 应用程序。
在查看了我的 dmp 文件后,我与 Microsoft CLR 专家进行了交谈,他表示
当加载到您的进程中时,.exe 文件中偏移量 0×168 处的 8 个字节被设置为 0。这是导致 CLR 失败的问题。您提供给我的文件中的这些位设置正确。
C:\Windows\System32\Detoured.dll 被加载到进程中。对我来说,这意味着您的机器上正在使用 detours 库来修改这些进程的行为。
我还发现,当我启动到安全模式时,一切都正常。
另外,我发现如果我右键单击 .NET 可执行文件,然后选择“以...身份运行”并输入我当前登录的用户凭据,则该应用程序可以运行。如果我双击该应用程序,它就不起作用。
有很多系统事件消息和 Dr. Watson 类型错误。以下是我收到的一些错误:
从 Visual Studio 启动 MS Developer Web Server 时,弹出消息框显示:
WebDev.WebServer40.exe has encountered a problem and needs
to close. We are sorry for the inconvenience.
VSHost 系统事件日志条目:
Event 1:
Application: MyWebSite.vshost.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an internal error
in the .NET Runtime at IP 791A8BBD (79140000) with exit code 80131506.
Event 2:
Faulting application MyWebSite.vshost.exe, version 10.0.30319.1,
stamp 4ba2084b, faulting module clr.dll, version 4.0.30319.1,
stamp 4ba1d9ef, debug? 0, fault address 0x00068bbd.
正在运行的第三方应用程序的系统事件日志条目:
Source: Application Popup
Description: Application popup: #APPNAME#.exe – Application Error : The
application failed to initialize properly (0xc000007b). Click on OK
to terminate the application.
我构建的使用 .NET v4 Framework 系统事件日志的应用程序显示:
Source: .NET Runtime
Framework Version: v4.0.30319
Description: The process was terminated due to an internal error in the
.NET Runtime at IP 791A8BBD (7914000) with exit code 80131506.
我构建的使用 .NET v2 Framework 系统事件日志的应用程序显示:
Source: .NET Runtime
Description: .NET Runtime version 2.0.50727.3053 – Fatal Execution
Engine Error (7A097706) (80131506)
以下是更多详情请参阅我的博客- 包括我迄今为止尝试过的一切以及更多细节和叙述。
就还原点而言,我最早的还原点是几周前的,当时我仍然遇到这个问题,所以我认为还原那个点不会有太大帮助。
我如何才能找出哪个进程导致了问题然后修复计算机?
答案1
既然您说该问题不会在安全模式下发生,那么很明显这是由已安装的应用程序、附加组件或驱动程序引起的。
考虑到您已为这个项目付出的努力,我建议您重新格式化硬盘并重新安装 XP,然后逐个重新安装所有产品,重新启动以检查问题是否再次出现。或者,您可以使用 Revo Uninstaller 卸载产品,但即使是 Revo 也可能会错过特别狡猾的安装。
坦率地说,启动时被修改的可执行文件有病毒感染的味道,这就是为什么我在这种情况下特别建议重新格式化。
答案2
您的答案可能在第一段中 - 删除 Detours。转到“添加/删除程序”,找到 Detours,然后将其删除。
答案3
我会尝试使用依赖性遍历器. 分析程序并保存输出。启动到安全模式并再次分析。比较输出可能会提供有关程序何时被修改的更多信息。
您还可以尝试使用 WinDbgWindows 调试工具(该链接适用于驱动程序开发人员,但我曾使用 WinDbg 来处理 .NET 程序。)为了获得最多的调试输出,您需要Windows 符号包也适用于 XP。