我在 FormClosing()& FormClosed()事件 对于另一个应用程序,我想强行关闭第一个这样的应用程序:
string procId = proc.Id.ToString();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "taskkill.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "/f /t /pid " + procId;
Process.Start(startInfo);
当我想通过这些代码强制关闭第一次申请或使用任务管理器 - >结束流程, FormClosing()&不会触发 FormClosed()事件。
如何在每种情况下强制执行这些事件或解决方案是什么?
答案 0 :(得分:1)
见Prevent C# app from process kill。
您无法阻止您的应用程序进程被终止,并且您将无法获得终止它的事件。
所以你必须满足一个过程在关机时没有很好地清理的情况。就此而言,无论如何,你需要这样做,如果你的应用程序运行时机器BSOD怎么办?您永远不能假设前一个实例已成功完成。
看起来您的应用在关闭时关闭了一些数据文件,因此下次程序运行时它可以再次读取该文件。如果是这种情况,您可以在文件中或附近写一些“脏标志”,如果标记了文件,则在启动时清理文件。
如How does task manager kill my program?和MSDN: Terminating a Process (Windows)中所述:
请注意,您无法拦截或响应TerminateProcess。你的过程将会消亡,在此之前你无能为力。
如果进程被TerminateProcess终止,则进程的所有线程立即终止,无法运行其他代码。这意味着线程不会在终止处理程序块中执行代码。
答案 1 :(得分:0)
也许是一个愚蠢的问题,但为什么不要求应用程序自行关闭?在两个应用程序之间建立一条通信线路非常容易,让后一个应用程序通知另一个应用程序应该自行终止。
然后你就可以进行干净的关闭了。