2011-11-23 29 views
0

我正在创建一个处理Excel应用程序的C#应用​​程序。如何优雅地停止关机时的托管应用程序?

Excel文件我装载被预加载(因为它需要一段时间来加载它由于文件的周长),然后当由用户请求显示。

但是,当用户关闭Windows时,Windows会将会话查询结束消息发送到隐藏的Excel应用程序,强制显示“您是否想将更改保存到”(EXCEL FILE)?“。

如何重写此行为,并优雅地杀死Excel文件?

我已经研究过通过VBA抑制保存提示,但活动结束后的消息不会执行该代码。我已经考虑通过处理我自己的C#应用​​程序的会话查询结束消息来杀死进程,但这是不可靠的,因为它是一个种族(什么应用程序首先获取消息,我的C#或我的隐藏的Excel文件)

编辑: 通过优雅地杀死,我的意思是在没有提示用户的情况下关闭进程。我知道如何在用户选择退出程序时执行此操作,但我不知道何时调用此程序。

EDIT2: 我使用Microsoft.Office.Interop.Excel

+0

你是什么意思,“优雅地杀死”应用程序?强制关闭而不保存但不显示对话?无需用户干预保存? – DMan

+0

@Dan我的意思是在不保存的情况下关闭应用程序进程。我通常在用户关闭我的应用程序时执行此操作,但Windows关闭会干扰此 – James

+0

当Windows关闭时,应用程序肯定会被终止? –

回答

1

没有显示你的代码很难告诉你有什么跟踪在内存中的Excel实例,但是,这里是我的代码片段,其以相似的工作原理情况(我认为)没有提示:

Excel.Application xl = new Excel.Application(); 
xl.Visible = false; 
xl.DisplayAlerts = false; 

//do something 

xl.Quit(); 
Marshal.ReleaseComObject(xl); 
xl = null; 
GC.Collect(); 
+1

我用'xl.DisplayAlerts'之前,我记得它抑制了一些提示,但没有关闭所有。这当然值得一试。我已经看到很多人也使用'Workbook.Saved = true;',但我不确定OP是在寻找什么。 –

+0

@ChristopherCurrens'Workbook.Saved = true;'是这里的门票。我试图拦截发送给excel的Windows关机消息 – James

相关问题