C# 如何在关闭时优雅地关闭托管应用程序?

C# 如何在关闭时优雅地关闭托管应用程序?,c#,.net,shutdown,C#,.net,Shutdown,我正在创建一个处理Excel应用程序的C#应用程序 我正在加载的excel文件是预加载的(由于文件的周长,加载需要一段时间),然后在用户请求时显示 但是,当用户关闭Windows时,Windows会向隐藏的excel应用程序发送会话查询结束消息,强制显示一个可见的“是否要保存对(excel文件)的更改?” 如何重写此行为并优雅地删除excel文件 我已经研究过通过VBA抑制保存提示,但是会话结束消息不执行此代码 此外,我还试图通过处理我自己的C#应用程序的会话查询结束消息来终止进程,但这是不可靠

我正在创建一个处理Excel应用程序的C#应用程序

我正在加载的excel文件是预加载的(由于文件的周长,加载需要一段时间),然后在用户请求时显示

但是,当用户关闭Windows时,Windows会向隐藏的excel应用程序发送会话查询结束消息,强制显示一个可见的“是否要保存对(excel文件)的更改?”

如何重写此行为并优雅地删除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();

“优雅地终止”应用程序是什么意思?强制关闭而不保存,但不显示对话?保存而不需要用户干预?@DMan我的意思是不保存就杀死应用程序进程。当用户关闭我的应用程序时,我通常会这样做,但Windows关机会干扰这一点。当然,当Windows关机时,应用程序会被杀死?你能澄清一下“处理Excel应用程序的C#应用程序”吗?你到底在做什么?@BaliC Excel在被
WM\u QueryEndSession
关闭后,通过进程终止(“您想保存吗?”提示)关闭时表现不同。我以前使用过
xl。DisplayAlerts
,我记得它抑制了一些提示,但不是全部。当然值得一试。我看到很多人使用
Workbook.Saved=true也是,但我不确定OP是否在寻找它。@christorcurrens
Workbook.Saved=true是这里的票。我试图截获发送到excel的Windows关机消息时考虑过度了