如何修复Windows Visual C ++运行时错误

Windows中的共享库使程序员不必每次都要执行一项共同的任务就需要重新发明轮子,从而使编程效率大大提高。它们还使发现共享代码中的安全漏洞变得更加容易,因为它需要在更少的地方进行修补,并且不需要重新编译每个应用程序。

尽管有这些积极的方面,但它们仍然可以构成他们试图解决可能产生的错误消息的根本原因时遇到的问题。

我们的读者的问题:

如何修复Windows Vista 32位C:\ Windows Dell Inspiron 530上的\ explorer.exe问题?

在屏幕快照中显示的对话框中单击“确定"按钮后,屏幕将变黑并返回正常运行状态,但不允许我访问尝试从“我的电脑"访问它们时,请依次选择C,D和E驱动器。

运行 sfc / scannow 不会发现任何错误。我从Dell和Microsoft网站下载了更新,试图解决此问题。我还安装了Microsoft Visual C ++ 2010可再发行组件包(x86)。根据Windows Update,PC完全是最新的。

Bruce的回复:

注意:有关Windows 7和更早版本中的Windows资源管理器的讨论也适用于Windows 7中的文件资源管理器。 Windows 8和更高版本。如果它们之间有显着差异,则将明确说明。

Windows Shell

Windows资源管理器外壳程序,并作为资源管理器运行。在Task Manager或Sysinternals的Process Explorer中看到的exe进程,用于实现属性表,属性处理程序,预览处理程序,上下文菜单以及您每天在Windows Explorer中使用的许多其他元素。

Shell扩展允许程序员通过编写DLL来执行任务并在操作系统中注册DLL,可以轻松地向Windows资源管理器添加功能,因此Explorer知道在哪里可以找到完成任务的代码。例如,7-Zip将图标叠加层添加到标准驱动器图标上,因此您可以一目了然地看到驱动器的运行状况,而HashTab添加了新的属性表,以计算和显示所选文件的哈希。

这些外壳扩展中的许多都是作为进程内组件对象模型(COM)服务器实现的。这意味着当某个进程(在本例中为Windows资源管理器)使用扩展名时,它将不会作为具有其自己的进程标识符(PID)的单独的运行进程出现在任务管理器或进程资源管理器中。而是在调用explorer.exe进程内执行。

Windows资源管理器被编写为能够作为两个单独的进程运行,但在其默认配置下,它将仅运行一个实例。在启动过程中首次执行它时,它将创建Windows桌面环境。再次执行它会在现有进程中创建一个新线程,该线程显示熟悉的文件管理窗口,而不是启动新进程。

此行为可以减少内存占用量,但也可以带来一点点变化解决问题时。在explorer.exe进程中执行的代码(包括由DLL提供的进程内服务器)中发生严重错误或未处理的异常,将导致整个桌面环境崩溃。

在大多数情况下,桌面进程将自动重新启动。如果它没有重新启动,您仍然应该可以使用Ctrl-Shift-Esc来启动任务管理器。从那里转到文件>新任务(运行...)>键入 explorer.exe>确定以重新启动该过程。

可以避免这种情况一个简单的变化。在Vista / 7中打开 Windows资源管理器>组织>文件夹和搜索选项。对于Windows 8和更高版本,打开文件资源管理器>视图>选项>更改文件夹和搜索选项。选择“查看"标签,然后在单独的进程中检查启动文件夹窗口

更改此设置会将您的桌面进程与所有其他Windows资源管理器隔离开打开的窗户。如果这些Explorer窗口中的任何一个崩溃,您的桌面将保持原状。

Microsoft Visual C ++运行时库(CRT)

Microsoft Visual C ++运行时库提供了用于对Windows进行自动编程的例程任务,例如输入/输出,文件操作,内存分配,系统调用以及许多其他任务。

每个Windows安装将至少安装两个不同版本的CRT。通过Windows 10计算机全新构建的Vista SP2将同时具有8.0版和9.0版(分别为VC 2005和VC 2008)。安装其他软件后,它还可能包含运行时的最新版本,具体取决于使用哪个版本的Visual C ++来创建程序或其任何组件。

运行时错误

在一段代码中遇到错误或异常时,理想情况下将在当前正在执行的过程中尽快对其进行处理,并予以纠正或允许正常失败。如果错误不是在本地处理的,则将错误传递给调用当前执行代码的代码,然后继续执行该过程,直到处理异常为止。如果它完成了运行到链顶部的操作,但仍未得到处理,则会生成运行时错误,如上所示。

当用户单击“确定"按钮时,该过程将终止。如果程序具有已定义的故障行为(例如关键服务),或者其运行状态被另一个进程监视,则可能会自动重生该程序。这就是这种情况。当explorer.exe进程终止时,屏幕变黑,然后重新启动explorer.exe进程时,桌面又回来了。

尽管上面的错误消息清楚地表明它来自explorer.exe进程, explorer.exe本身可能不会有问题。罪魁祸首很可能在其他地方,例如资源管理器正在使用的第三方扩展。

其他注意事项

根据我们上面读者对问题的描述,还有一些我们需要考虑的其他事项:

  • 崩溃时,资源管理器正在尝试但无法填充列表视图。
  • 无法访问重新启动桌面后驱动器可能表明另一个进程已锁定一个或多个设备,从而阻止了新创建的explorer.exe进程的访问。
  • 运行 sfc / scannow 并获得一份明确的健康单,将Windows受保护的资源放在列表的底部,以供考虑。其他原因的可能性更大。
  • 正在解决问题

    在这种特殊情况下,我将在三个方面寻找解决方案。第一个涉及Windows Search服务,第二个涉及调查Shell扩展,最后一个是VC ++可再发行文件本身。

    因为原始屏幕截图显示了资源管理器尝试填充列表视图时发生的崩溃,因此Windows搜索服务可能阻止对所需资源的访问。我已经看到这种情况是在服务崩溃且没有正确的重启参数时发生的。

    Win + R>键入 services.msc>确定使用服务模块启动管理控制台。向下滚动至Windows搜索,然后双击条目以打开“属性"对话框。确保“恢复"选项卡上的设置与下面的图像匹配。

    最常见的问题是“重启服务:"设置。当此设置为非零时,经常会发生此错误。

    为您的系统体系结构(x86或x64)下载Nirsoft的ShellExView,安装并运行它。检查系统并用数据填充表格将花费一些时间。滚动到“ CLSID修改时间"列,然后单击标题以对该字段进行排序。如果您希望排除Microsoft提供的模块,则可以转到选项>隐藏所有Microsoft扩展。对于使用64位版本Windows的用户,您可能还希望通过转至选项>显示32位Shell扩展来显示系统上的32位扩展。

    寻找在症状开始之前添加的扩展名。选择一个或多个并按 F7 或转到文件>禁用所选项目,或单击工具栏中的红色LED图标。理想情况下,应该一次完成一次。

    测试以查看症状是否持续。如果这样,您可以使用 F8 文件>启用所选项目或绿色的LED工具栏图标来重新启用以前禁用的扩展名。从这里,禁用其他扩展,并重复测试过程,直到找到导致问题的扩展。

    如果只有一个程序在抛出错误,则我将其用作最后的选择。如果您有多个程序存在VC ++运行时错误问题,则可能需要先尝试一下。

    在查看系统中已安装的程序时(控制面板>程序和功能),它显示了从版本8到版本12(从VC ++ 2005到VC ++ 2013)的每个版本的可再发行软件包(及其更新)。因为使用了Microsoft编程工具,所以我安装了它们。大多数用户不会拥有所有这些功能。

    您可以从Microsoft找到支持的Visual C ++版本的最新下载。对于我们这里的目的,您只需要关心那些标有“可再分发"软件包的软件包。被归类为Service Pack的链接用于编程工具,而不仅仅是运行时。您只需要系统上已安装程序中当前列出的程序即可。在这种情况下,安装其他版本将无济于事。使用64位操作系统的用户可能需要x86和x64版本的CRT。

    Windows Update会检查您的计算机是否已安装了这些软件包的最新更新,但并没有进行检查以确保它已正确安装且尚未损坏。安装程序可以检查以确保所有运行时文件均正确,并且所有注册表项均正确。

    一旦下载了适当的安装程序,请在系统上运行它们。 2005版本会提示您在重新安装软件包之前接受许可协议。其他所有程序都有一个GUI,该GUI会询问您是否要修复或卸载现有安装。在大多数情况下,修复操作将解决所有问题。

    如果您想尝试最极端的方法,则可以卸载运行时,重新启动计算机,然后重新安装它们。我不建议在2005和2008运行时中使用此方法。如果没有它们,Windows将产生很多错误,并且在您重新启动时将没有很多功能。

    结论

    稍加观察,就会发现反复试验,并了解如何从系统上的运行时生成错误,可以找到并解决软件问题,而无需借助复杂的调试工具和日志。

    您是否遇到了运行时错误系统?解决这些问题需要什么?在下面的评论中让我知道。

    标签: 文件资源管理器 疑难解答 Windows Windows资源管理器 Windows搜索