Закройте процесс Excel с помощью Interop
Всем привет,
Я запустил приложение, которое создает список Excel с помощью Interop. Проблема в том, что после сохранения списка excel у меня есть открытый процесс в Диспетчере задач. Я уже искал в Интернете решение, но не нашел решения своей проблемы, чтобы закрыть (не убить) процесс.
Вот та часть, где я пытаюсь закрыть приложение excel:
if (xlsApplication != null) { if (xlsApplication.Workbooks != null) { if (xlsApplication.Workbooks.Count < 0) { xlsWorkbook.Close(true, @"C:\test.xls", null); xlsApplication.Workbooks.Close(); xlsApplication.Quit(); missing = null; ReleaseObjects(); r_Time = null; r_Name = null; r_ReceivedTime = null; r_Received = null; r_OrderedTime = null; r_Ordered = null; xlsRange = null; xlsWorksheet = null; xlsWorkbook = null; xlsApplication = null; } } } GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); //GC.WaitForFullGCComplete(); GC.WaitForPendingFinalizers();
Небольшое пояснение к фрагменту:
В методе " ReleaseObjects()" я освобождаю все com-объекты и диапазоны с помощью " System.Runtime.InteropServices.Маршал.Метода releasecomobject()".
Некоторые вещи в сниппете, например, чтобы установить систему.Отражение.Недостающий.Значение, отсутствующее до нуля, - это скорее акты отчаяния, чем полезный код. (Потому что я пытаюсь закрыть приложение уже с неделю! :omg: )
Во время отладки я искал открытые Com-объекты, но их там нет.
Единственное, когда я сохраняю список Excel, а затем нажимаю "закрыть", где я снова запускаю через GC - часть(в другом методе, но он делает то же самое), то приложение закроется "нормально".
Я старался автоматизировать, чтобы после каждого процесса сохранения форма закрывалась. Его функция(закрыть форму и так далее) та же, но он не закрывает приложение excel. :doh:
Похоже, что Com-объекты не освобождаются вовремя.
Есть ли у кого-нибудь опыт работы с этой проблемой.
тнх