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#?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top