【发布时间】:2018-02-26 19:01:13
【问题描述】:
我正在尝试编写一个程序,该程序将在另一个程序没有响应时重新启动它。当被监控的程序没有响应时,会弹出并显示系统消息框
-> Check online for a solution or close the program
-> Close the program
-> Debug the program
一个windows事件将被写入windows事件日志。我向这个 Windows 事件添加了一个触发器,它将运行重新启动程序。它会杀死没有响应的程序,然后重新启动它。但是我发现 .kill() 和 .CloseMainWindow() 都不能关闭没有响应的程序和系统对话框。有没有办法杀死一个没有响应的程序? 以下是我的代码:
Process[] processes = Process.GetProcessesByName(app_name);
foreach (Process p in processes)
{
bool havingMainWindowHandle = false;
if (p.MainWindowHandle == IntPtr.Zero) {
havingMainWindowHandle = false;
writeLog(p.ProcessName + " don't have MainWindowHandle");
} else {
havingMainWindowHandle = true;
writeLog(p.ProcessName + " status:" + p.Responding.ToString());
}
p.WaitForExit(1000);
if (havingMainWindowHandle)
{
p.CloseMainWindow();
p.Close();
} else
{
writeLog(app_name + " is terminated by .kill() API");
p.Kill(); //but function kill() can't terminate the not responding program
}
Thread.Sleep(1000);
}
Process my_otherprogram = new Process();
my_otherprogram.StartInfo.FileName = app_path;
my_otherprogram.Start();
【问题讨论】:
-
“不响应”是什么意思?您是指Windows如何声明程序没有响应吗?如果是这样,你必须明白这一切意味着ui线程没有在设定的时间内将控制权返回给窗口。
-
这里的“无响应”是指程序遇到问题,弹出系统对话框;用户只能在“在线检查解决方案或关闭程序”、“关闭程序”、“调试程序”之间进行选择。在这种情况下,我发现 .kill() 和 .CloseMainWindow() 都无法关闭“无响应”AP 并让系统对话框关闭。我正在寻找其他解决方案来关闭“无响应”(即将崩溃)AP。
-
我发现即使是“taskkill /im myprocess.exe /f”也无法删除“没有响应”(即将崩溃)的AP。会出现错误:“访问被拒绝”。
标签: c#