0

我正在使用一个用 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 错误,所以他们无能为力。
我的猜测是他们的后台工作人员不想在某事中间被打断时死去。

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

4

2 回答 2

2

是的,将 WM_CLOSE 发布到其主窗口并让它优雅地关闭。有关详细信息,请参阅此答案:如何在 C# 中使用 WM_Close?

于 2012-08-08T18:48:27.213 回答
0

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

win key + R

然后输入

tskill cawf

或者

tskill cawf.exe

尝试其中之一。

于 2012-08-08T18:49:49.223 回答