当我使用应用程序时,出现以下错误消息(取决于 Windows 版本):
Windows XP
[应用程序名称] 遇到问题,需要关闭。我们对此造成的不便深表歉意。
Windows Vista、Windows 7、Windows 8
[应用程序名称]已停止工作
之后,应用程序关闭。为什么应用程序“需要关闭”或“停止工作”,我该怎么办?
答案1
首先,那个错误不是你的错。
一些程序员忘记处理程序中的一些错误,因此程序失败。
当然,问题并不有位于应用程序本身中(这样程序员就不用管了)。它可能位于 Windows 中,也可能位于 MSVC 运行时中,也可能位于 .Net 运行时中,也可能位于您的视频卡驱动程序中,或者其他什么(这就是为什么总是有人告诉您在联系支持人员之前安装所有更新)。
您已经解决了所有问题,但问题仍然存在。现在该怎么办?
好吧,现在唯一剩下的事情就是有问题的应用程序有缺陷,而程序员对此也无能为力(啊哈!)。所以这是软件作者的问题。所以请联系他们,询问他们是否能帮你解决这个问题。
但如果他们告诉我他们的软件是完美的,只有我一个人遇到这个问题,而且总的来说这是我的错,那该怎么办?
现在到了有趣的部分。你可以找到实际的导致错误消息的原因。
应用程序实际上告诉操作系统什么,导致操作系统出现“你必须闭嘴!“?
为了实现这一点,您可以使用多种工具。
- 日志文件
- Windows 事件日志
- 进程监控
如果有问题的应用程序写出任何日志文件,那么这些文件对于查找应用程序问题的原因非常有用。请阅读这些文件并在此处讨论可能出现的错误消息。
Windows 事件日志肯定会包含有关崩溃应用程序的一些信息。如果它实际上是一个 .Net 应用程序,您甚至可能会很幸运,可以从日志中提取调用堆栈(这对开发人员非常有帮助)。
如果其他方法都失败了,转向进程监控. Process Monitor 是一个记录全部应用程序和操作系统之间的通信(可以这么说)。因此,在捕获的结果数据中,您可以准确地看到应用程序调用了哪个函数导致了未处理的错误情况。这可能是一些微不足道的事情,例如尝试访问不存在的文件或注册表对象。但在日志中找到一个调用可能需要很长时间,如果您没有软件开发经验,您很可能无法通过这种方法取得很大进展。
如果这让你觉得“嗯,这不太可能帮助我解决问题。“,那么你可能是对的。虽然尝试追踪这样的问题对某些人来说很有趣,但这通常是编写错误软件的人的工作。
他们比你更有能力发现问题。一份合适的错误报告有时会起到很大的作用。
答案2
卸载了以前版本的 .NET Framework 并安装了 4.0
永远不要这样做, 你是不是应该卸载 .NET 框架。这些版本背后的想法是,当微软改进和更改 .NET 框架时,它们可能会(并且经常会)破坏在以前的 .NET 版本上开发的程序的兼容性。
为了避免这个问题,我们发布了一个新版本的 .NET,它可以与其他版本一起安装。Windows 可以正确管理它们,然后加载程序所需的任何版本。这样您就可以毫无问题地运行新旧程序。
我再说一遍,当一个应用程序是为.NET 3.5 设计时,它不可能在任何其他 .NET 版本上可靠运行。
由于您的一条评论提到“在卸载 .NET 的先前版本之前,您的自定义软件始终可以正常工作”,因此我建议您重新安装它们。最简单的方法是重新安装应用程序 - 它们通常包含所需的适当 .NET 安装程序。
答案3
在回复您对我的回答的最后一条评论时,我想大多数人都会同意没有足够的信息来为您提供精确的解决方案。
重新安装.NET 是一个有根据的猜测,但我们不知道清理实用程序删除了哪些其他文件/注册表条目,以及哪一个可能是至关重要的。
我的第一个答案是:如果重新安装应用程序没有帮助,请联系您的供应商/开发商以解决问题。供应商知道启动他们的应用程序时需要哪些文件,但我们不知道!
然后我注意到,在您的个人资料中,您在 stackoverflow 上发布了一个问题,其中您指出您的 C 盘“几乎没有剩余的 KB” - 这可能是您清理的原因。好吧,如果我是您,我会首先尝试修复这个问题。您应该确保始终至少有 1 GB 的可用空间。
几 MB 的可用空间会带来麻烦,如果窗口或应用程序尝试分配空间,肯定会导致“需要关闭”错误。此外,它还有助于避免需要进行极端清理并无意中删除重要文件。
因此我的第二个答案是:尽快购买新的(或使用另一个)更大的主硬盘。如果您的应用程序仍然崩溃,您可能需要重新安装 Windows 及其上的所有应用程序/驱动程序。这需要大量工作,但最终是解决问题的绝佳方法(阅读:它几乎肯定会解决问题)。
最后,清理实用程序不是官方实用程序。Windows 确实容易积累东西,但清理实用程序在清理方面做得好与否还有待商榷。Windows 的大部分增长来自库 (DLL)、更新和各种已安装的应用程序,这些实用程序无论如何都不应该试图处理太多。临时文件夹很容易不时手动清理。通常,您可以做的最好的清理是卸载您绝对不需要的应用程序。您知道,我发现大多数清理工具增加的臃肿比它们清理的内容更多。您安装的大量反恶意软件似乎也对手头的工作来说有点过度了。
我的第三个答案是:以后清理时要省点力气。磁盘空间足够便宜,您应该能够避免所有这些麻烦,从而节省几兆字节。
建议卸载未使用的应用程序,并时不时手动删除“TEMP”文件夹。尽可能避免安装许多应用程序只是为了试用它们 - 因为这会导致不必要的 Windows 增长,而且很难恢复。理想情况下,坚持使用一款好的防病毒软件、一款好的反恶意软件以及任何您需要的工作软件。避免弄乱注册表!
答案4
“应用程序遇到问题,需要关闭。我们对此造成的不便深表歉意”
这始终是对应用程序执行某些操作导致程序无法安全继续的响应。
该过程中的某些内容出现了非常严重的错误,并且该过程不再安全地继续(这通常是堆注意到堆溢出或双重释放漏洞已被触发)。
程序尝试读取、写入或执行不存在的内存或操作无效的内存(例如 DEP 阻止您在堆栈上执行数据)。
程序触发了异常,并且没有注册的处理程序知道如何处理它。
该对话框是 Windows 通知您程序以不受控制的方式终止,同时需要将程序的故障转储发送到 Windows 错误报告服务。程序的开发人员可以查看这些故障转储以尝试修复错误。
这并不表示您受到了病毒攻击。这只是表示程序存在错误。唯一的解决方案是将崩溃转储发送给程序的原始开发人员(通过 WER),并在错误修复后更新到修复版本。