Como interromper um processo do Excel que eu iniciei em um aplicativo C# .NET?
-
22-09-2019 - |
Pergunta
Estou executando o Excel a partir de um aplicativo C# .NET e tendo problemas para que o processo seja desligado. Como posso obter o processo do Excel para desligar corretamente do meu programa C#?
Solução
Experimente isso:
foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
{
if (process.MainModule.ModuleName.ToUpper().Equals("EXCEL.EXE"))
{
process.Kill();
break;
}
}
Outras dicas
Tenho cerca de 99% de certeza de que seu problema é causado por referências com COM, impedindo que o processo do Excel seja desligado. O Excel é particularmente propenso a isso, pois tende a gerar referências de COM de forma transparente sem dar os meios para obter suas alças e desligá -las explicitamente.
O PIAS aumenta esse problema, fazendo seu próprio conjunto de referências aos objetos COM subjacentes que eles não limpam, a menos que você os faça explicitamente fazê -lo. Trabalhar com o Excel através do PIAS é bastante complicado por esse motivo.
Application.Quit()
(IIRC, isso é como se chama) vai Desligue o processo se as referências estiverem todas limpas corretamente. Isso significa que você precisa gerenciar cuidadosamente o ciclo de vida de qualquer coisa que mantenha referências COM ao processo do Excel e garantir que todas as referências de COM sejam limpas corretamente.
Application app = new Application();
...
EndTask((IntPtr)app.Hwnd, true, true);
[DllImport("user32.dll")]
public static extern bool EndTask(IntPtr hwnd, bool shutdown, bool force);
PowerShell é seu amigo aqui.Você pode iterar nos sites, teias e listas para fazer sua mudança de esquema.