如何优雅地停止关机时的托管应用程序?
我正在创建一个处理Excel应用程序的C#应用程序。如何优雅地停止关机时的托管应用程序?
Excel文件我装载被预加载(因为它需要一段时间来加载它由于文件的周长),然后当由用户请求显示。
但是,当用户关闭Windows时,Windows会将会话查询结束消息发送到隐藏的Excel应用程序,强制显示“您是否想将更改保存到”(EXCEL FILE)?“。
如何重写此行为,并优雅地杀死Excel文件?
我已经研究过通过VBA抑制保存提示,但活动结束后的消息不会执行该代码。我已经考虑通过处理我自己的C#应用程序的会话查询结束消息来杀死进程,但这是不可靠的,因为它是一个种族(什么应用程序首先获取消息,我的C#或我的隐藏的Excel文件)
编辑: 通过优雅地杀死,我的意思是在没有提示用户的情况下关闭进程。我知道如何在用户选择退出程序时执行此操作,但我不知道何时调用此程序。
EDIT2: 我使用Microsoft.Office.Interop.Excel
没有显示你的代码很难告诉你有什么跟踪在内存中的Excel实例,但是,这里是我的代码片段,其以相似的工作原理情况(我认为)没有提示:
Excel.Application xl = new Excel.Application();
xl.Visible = false;
xl.DisplayAlerts = false;
//do something
xl.Quit();
Marshal.ReleaseComObject(xl);
xl = null;
GC.Collect();
我用'xl.DisplayAlerts'之前,我记得它抑制了一些提示,但没有关闭所有。这当然值得一试。我已经看到很多人也使用'Workbook.Saved = true;',但我不确定OP是在寻找什么。 –
@ChristopherCurrens'Workbook.Saved = true;'是这里的门票。我试图拦截发送给excel的Windows关机消息 – James
你是什么意思,“优雅地杀死”应用程序?强制关闭而不保存但不显示对话?无需用户干预保存? – DMan
@Dan我的意思是在不保存的情况下关闭应用程序进程。我通常在用户关闭我的应用程序时执行此操作,但Windows关闭会干扰此 – James
当Windows关闭时,应用程序肯定会被终止? –