Как остановить процесс Excel, который я запустил из приложения C # .Net? - PullRequest
1 голос
/ 26 февраля 2010

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

Ответы [ 4 ]

4 голосов
/ 26 февраля 2010

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

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

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

4 голосов
/ 26 февраля 2010

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

foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
        {
            if (process.MainModule.ModuleName.ToUpper().Equals("EXCEL.EXE"))
            {
                process.Kill();
                break;
            }
        }
1 голос
/ 21 июня 2011
Application app = new Application();
...
EndTask((IntPtr)app.Hwnd, true, true);

[DllImport("user32.dll")]
public static extern bool EndTask(IntPtr hwnd, bool shutdown, bool force);
0 голосов
/ 26 февраля 2010

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

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

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

...