【问题标题】:Why Am I Receiving AccessViolationException When I Kill A Process?为什么我在终止进程时收到 AccessViolationException?
【发布时间】:2012-08-09 02:49:49
【问题描述】:

我正在使用一个用 C# 编写的 .EXE 程序(从一家公司购买)。
有时我需要关闭它(从外部,而不是手动关闭 - 我使用我的小型 C# 程序来执行 Process.Kill,而不是在需要时)
如果程序没有做任何事情 - 我可以轻松杀死它。
但如果它正在做一些“工作”(我认为它在他们的代码中是“计时器”或“后台工作人员”) - 它会关闭,但会出现一个小弹出窗口,上面写着“致命错误”(和“确定”按钮)。我点击“确定”,然后它会弹出一个更大的弹出窗口:

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at
System.Windows.Forms.UnsafeNetiveMethods.DispatchMessageA(MSG&msg)
at 
System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UNsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(in t32 dbComponentID, Int32 Reason, Int32 pv LoopData)
at
System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason ApplicationContext context)
at
System.Windows.Forms.Applicaion.ThreadContext.RunMessageLoop(Int32reason, ApplicationContext context_
at System.Windows.Forms.Application.Run(Form mainForm)
at cawf.xad70bf2c5a1a269d.xef498c90a0302180()

(CAWF 是我刚刚杀死的他们的进程的名称)。
在我在这里单击“确定”后 - 我必须再次杀死它,然后它才会死。
他们的支持人员说这是 Windows 错误,所以他们无能为力。
我的猜测是他们的后台工作人员不想在中间被打断时死去。

是否有任何可能的方法来杀死它“好方法”(这样它就不会给出这些错误)?

【问题讨论】:

  • 你能把适当的窗口关闭消息发布到这个应用程序的主窗口吗?

标签: c# winforms


【解决方案1】:

是的,将 WM_CLOSE 发布到其主窗口并让它优雅地关闭。详情见这个答案:How to use WM_Close in C#?

【讨论】:

    【解决方案2】:

    如果你想杀死它然后通过运行命令杀死它

    win key + R
    

    然后输入

    tskill cawf
    

    tskill cawf.exe
    

    尝试其中一种。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      相关资源
      最近更新 更多