Как остановить процесс Excel, который я запустил из приложения C# .Net?

StackOverflow https://stackoverflow.com/questions/2340663

Вопрос

Я запускаю Excel из приложения C# .Net, и у меня возникают проблемы с завершением процесса.Как я могу заставить процесс Excel корректно завершить работу из моей программы на C#?

Это было полезно?

Решение

Попробуй это:

foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
        {
            if (process.MainModule.ModuleName.ToUpper().Equals("EXCEL.EXE"))
            {
                process.Kill();
                break;
            }
        }

Другие советы

Я примерно на 99% уверен, что ваша проблема вызвана висячими ссылками COM, препятствующими завершению процесса Excel.Excel особенно подвержен этому, поскольку имеет тенденцию прозрачно генерировать ссылки COM, не давая вам возможности получить доступ к их дескрипторам и явно закрыть их.

PIA усугубляют эту проблему, создавая собственный набор ссылок на базовые объекты COM, которые они не очищают, пока вы явно не заставите их это сделать.Именно по этой причине работать с Excel через PIA довольно сложно.

Application.Quit() (IIRC, вот как это называется) воля завершите процесс, если все ссылки правильно очищены.Это означает, что вам необходимо тщательно управлять жизненным циклом всего, что содержит ссылки COM на процесс Excel, и следить за тем, чтобы все ссылки COM были правильно очищены.

Application app = new Application();
...
EndTask((IntPtr)app.Hwnd, true, true);

[DllImport("user32.dll")]
public static extern bool EndTask(IntPtr hwnd, bool shutdown, bool force);

В зависимости от ваших потребностей вы можете рассмотреть возможность использования Электронная таблицаGear для .NET что дает вам компонент, совместимый с Excel, без COM-взаимодействия (нет зависающих экземпляров, более высокая производительность, не нужно беспокоиться о том, установлен ли Excel или какая версия Excel установлена).

Вы можете увидеть живые примеры ASP.NET с исходным кодом C# и VB. здесь, узнайте больше об элементах управления и примерах Windows Forms SpreadsheetGear здесь, и загрузите бесплатную пробную версию здесь если хочешь попробовать сам.

Отказ от ответственности:Я владею ООО SpreadsheetGear.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top