在我的应用程序中,使用另一个应用程序(在托盘中运行)打印收据我需要做三件事:
第一点很容易,我只是简单地
Process.Start("_ReceiptPrinter.exe");
处理工作;)
但是现在,另外两个问题:
结束过程。我试过这段代码:
Process[] allProcs = Process.GetProcesses();
foreach (Process proc in allProcs)
{
ProcessThreadCollection myThreads = proc.Threads;
if (proc.ProcessName == "_ReceiptPrinter")
{
proc.Close();
}
}
不幸的是,我仍然可以在托盘中看到图标,并且流程仍在运行。
答案 0 :(得分:3)
proc.Close()要求它关闭但没有保证。使用:
proc.Kill();
答案 1 :(得分:0)
您仍然看到托盘图标的原因是图标由外部进程缓存(Windows资源管理器。)
process.Close()没有关闭应用程序的原因是因为应用程序没有处理窗口消息(因为这个调用模拟了WM_CLOSE请求,按照经典的Windows API。)
关闭应用程序的正确方法是process.Close,而不是process.Kill(),此外,作为应用程序/窗口关闭的一部分,您需要取消注册您已在系统中注册的任何托盘图标。这样,任何正常关闭的应用程序都可以正确清理托盘。
此外,您可以使用"关键终结器"这将保证在应用程序退出之前运行,但总灾难情况除外。