Domanda

Sono in esecuzione di Excel da un'applicazione C # .Net e avendo difficoltà a raggiungere il processo di chiudere. Come posso ottenere il processo di Excel a chiudere correttamente dal mio programma C #?

È stato utile?

Soluzione

Prova questo:

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

Altri suggerimenti

Sono certo che circa il 99% che il problema è causato da penzoloni Riferimenti COM impedendo il processo di Excel da arrestare. Excel è particolarmente incline a questo in quanto tende a generare in modo trasparente Riferimenti COM senza dare i mezzi per arrivare al loro maniglie e chiudere in modo esplicito giù.

Il composto PIA di questo problema, rendendo la propria serie di riferimenti agli oggetti COM di fondo che non puliscono fino a meno che non esplicitamente li rendono lo fanno. Lavorare con Excel attraverso i PIA è abbastanza laborioso proprio per questa ragione.

Application.Quit() (IIRC questo è quello che si chiama) arrestare il processo se i riferimenti sono tutti puliti correttamente. Questo significa che si deve gestire con attenzione il ciclo di vita di tutto ciò che contiene i riferimenti COM per il processo di Excel e fare in modo che tutti i riferimenti COM vengono puliti correttamente.

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

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

A seconda delle esigenze, si potrebbe considerare l'utilizzo di SpreadsheetGear per NET che ti dà un componente compatibile con Excel senza interoperabilità COM (istanze pendenti, migliore prestazione, non c'è bisogno di preoccuparsi se Excel è installato o la versione di Excel è installato).

È possibile vedere i campioni dal vivo con ASP.NET C # e VB fonte qui , impara informazioni su Windows Form di SpreadsheetGear i controlli ei campioni qui , e scaricare una prova gratuita < a href = "https://www.spreadsheetgear.com/downloads/register.aspx" rel = "nofollow noreferrer"> qui se volete provare voi stessi.

Disclaimer: possiedo SpreadsheetGear LLC

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top