Question

Je suis en Excel à partir d'une application C # .Net et avoir du mal à obtenir le processus d'arrêter. Comment puis-je obtenir le processus Excel pour fermer correctement de mon programme C #?

Était-ce utile?

La solution

Essayez ceci:

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

Autres conseils

Je suis à 99% sûr que votre problème est causé par des références ballants COM empêchant le processus Excel de se fermer. Excel est particulièrement sujette à ce qu'elle tend à générer de manière transparente les références COM sans vous donner les moyens d'obtenir à leurs poignées et les fermer explicitement.

Le composé PIA ce problème en faisant leur propre ensemble de références aux objets COM sous-jacents qu'ils ne nettoient pas sauf si vous faites explicitement les faire. Travailler avec Excel à travers les PIA est tout à fait fiddly précisément pour cette raison.

Application.Quit() (IIRC c'est ce qu'il appelle) Arrêter le processus si les références sont tous nettoyés correctement mis en place. Cela signifie que vous devez gérer avec soin le cycle de vie de tout ce qui contient des références COM au processus Excel et assurez-vous que toutes les références COM sont nettoyés correctement.

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

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

En fonction de vos besoins, vous pouvez envisager d'utiliser SpreadsheetGear pour .NET qui vous donne un composant compatible avec Excel sans COM Interop (pas de cas de suspension, de meilleures performances, n'ont pas à vous inquiéter si Excel est installé ou la version d'Excel est installé).

Vous pouvez voir des échantillons d'ASP.NET en direct avec C # et la source VB , apprendre plus sur Windows Forms SpreadsheetGear contrôles et des échantillons et télécharger un essai gratuit < a href = "https://www.spreadsheetgear.com/downloads/register.aspx" rel = "nofollow noreferrer"> ici si vous voulez essayer vous-même.

Disclaimer: Je détiens SpreadsheetGear LLC

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top