Как изящно убить управляемые приложения при завершении работы? - PullRequest
0 голосов
/ 23 ноября 2011

Я создаю приложение C #, которое обрабатывает приложения Excel.

Загружаемый файл Excel загружается предварительно (так как загрузка его занимает некоторое время из-за обхвата файла), а затем отображается по запросуuser.

Однако, когда пользователь закрывает Windows, Windows отправляет сообщения о завершении сеанса в скрытое приложение Excel, вызывая видимое «Вы хотите сохранить изменения в« (EXCEL FILE) »?».

Как мне переопределить это поведение и изящно убить файл Excel?

Я пытался подавить приглашение сохранения через VBA, но сообщения Session Ended не выполняют этот код.

Кроме того, я рассмотрел вопрос об уничтожении процесса, обработав сообщение собственного завершения сеанса Query Query в приложении, но это ненадежно, так как это гонка (какое приложение получает сообщение первым, мой C # или мой скрытый файл excel)

Редактировать: Изящно убивая, я имею в виду просто убить процесс без запроса пользователя.Я знаю, как это сделать, когда пользователь решает выйти из моей программы, я просто не знаю, когда вызвать эту процедуру.

Edit2: Я отслеживаю экземпляры Excel в памятииспользуя Microsoft.Office.Interop.Excel

1 Ответ

1 голос
/ 23 ноября 2011

Без показа вашего кода трудно сказать, что у вас есть, однако вот фрагмент моего кода, который работает в похожей ситуации (я думаю) без запроса:

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

//do something

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