Я пишу приложение, которое обращается к файлу Excel с помощью этого кода:
RBTApplication = new Excel.Application();
RBTWorkbooks = RBTApplication.Workbooks;
RBTWorkbook = RBTApplication.Workbooks.Open(
RBTDataSet.Instance.FilePath, 0, true, 5, "", "", true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
"\t", true, false, 0, true, 1, 0 );
RBTWorksheet = (Excel.Worksheet)RBTWorkbook.Worksheets.get_Item( 1 );
RBTRange = RBTWorksheet.UsedRange;
После загрузки нужных мне данных я пытаюсь закрыть приложение Excel с помощью этого фрагмента кода:
RBTWorkbook.Close();
RBTApplication.Quit();
RBTWorksheet.ReleaseComObject();
RBTWorkbook.ReleaseComObject();
RBTWorkbooks.ReleaseComObject();
RBTApplication.ReleaseComObject();
Моя проблема в том, что процесс EXCEL.EXE все еще выполняется.Простое решение, такое как уничтожение всех процессов Excel, звучит не очень хорошо, так как мой процесс может быть одним из многих электронных таблиц, используемых одновременно.Это также влияет на открытие новых таблиц Excel - каждый открывается как доступный только для чтения, пока я не убью этот процесс.
Итак ... как правильно закрыть это приложение ИЛИ уничтожить этот конкретный процесс (есть ли способполучить PID из COM-объекта?).Я думаю, что нашел один (не пробовал) - получить список процессов exll до и после открытия нового ExcellApp, сравнить списки (получить разницу), убить определенный процесс, зная его PID.Но это решение не похоже на правильный способ обработки COM-объектов и других приложений из моего приложения.