Aplikace sady Office není ukončena po automatizace z aplikace Visual Studio.NET klienta

Překlady článku Překlady článku
ID článku: 317109 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Při automatizaci aplikace sady Microsoft Office z Aplikace Microsoft Visual Basic.NET nebo Microsoft Visual C#.NET, aplikace sady Office není ukončena při volání Ukončit Metoda.

Příčina

Při aplikaci Visual Studio.NET volání COM objekt ze spravovaných kód, je automaticky vytvořen Runtime Callable Wrapper (RCW). RCW volání mezi marshals.SÍŤOVÉ aplikace a objektu COM. Udržuje RCW počet odkazů na objekt COM. Proto pokud nebyly všechny odkazy vydána RCW, objekt modelu COM není ukončena.

Řešení

Chcete-li se ujistit, že ukončení aplikace sady Office, ujistěte se, že že kód automatizace splňuje následující kritéria:
  • Každý objekt Deklarujte jako novou proměnnou. Například změnit. následující řádek kódu
    oBook = oExcel.Workbooks.Add()
    					
    následující:
    dim oBooks as Excel.Workbooks
    oBooks = oExcel.Workbooks
    oBook = oBooks.Add()
    					
  • Použití System.Runtime.InteropServices.Marshal.ReleaseComObject Po dokončení pomocí objektu. Toto sníží referenční počet RCW.
  • Chcete-li uvolnit odkaz na proměnnou, nastavte proměnnou rovno Nic nebo Null.
  • Použít Ukončit metody objektu aplikace Office ověření pravosti serveru vypnete.

Prohlášení

To chování je záměrné.

Další informace

Kroky pro reprodukci tohoto chování

  1. Spusťte aplikaci Visual Studio.NET.
  2. V Soubor nabídky, klepněte na tlačítko Nový a potom klepněte na tlačítko Projekt. Ve skupinovém rámečku Projekty jazyka Visual Basic, vyberte Aplikace systému Windows a klepněte na tlačítko OK. Ve výchozím nastavení je vytvořen formulář Form1.
  3. Přidat odkaz na Knihovna objektů Microsoft Excel. Chcete-li to provést, postupujte takto:
    1. V Projekt nabídky, klepněte na tlačítko Přidat odkaz.
    2. V COM karta, vyhledejte knihovnu objektů aplikace Excel a klepněte na tlačítko Vybrat.

      Aplikace Microsoft Excel 2002: Knihovna objektů Microsoft Excel 10.0

      Poznámka: Pokud jste tak již neučinili, je vhodné, Stáhněte a nainstalujte Microsoft Office XP primární definiční sestavení (PIA). Další informace o sestaveních PIA sady Office XP získáte klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
      328912Microsoft Office XP primární sestavení InterOp (PIA) jsou k dispozici ke stažení
      Pro aplikaci Microsoft Office Excel 2003: Knihovna objektů Microsoft Excel 11.0
    3. Klepněte na tlačítko OK v Přidat odkazy Dialogové okno potvrďte výběr.
  4. V Zobrazení nabídky, klepněte na tlačítko Panel nástrojůa pak přetáhněte Tlačítko řízení na Formulář1.
  5. Poklepejte na položku Button1. Zobrazí se okno kód pro formulář.
  6. Následující kód přidejte na začátek Form1.vb:
    Imports Microsoft.Office.Interop
    					
  7. Nahraďte následující kód v okně Kód
        Private Sub Button1_Click(ByVal sender As System.Object, _
           ByVal e As System.EventArgs) Handles Button1.Click
        End Sub
    					
    s následujícím:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim oApp As New Excel.Application()
        Dim oBook As Excel.Workbook = oApp.Workbooks.Add
        Dim oSheet As Excel.Worksheet = oApp.ActiveSheet
    
        oSheet = Nothing
        oBook.Close(False)
        oBook = Nothing
        oApp.Quit()
        oApp = Nothing
    
        Debug.WriteLine("Sleeping...")
        System.Threading.Thread.Sleep(5000)
        Debug.WriteLine("End Excel")
    End Sub
    					
  8. Stisknutím klávesy F5 pro spuštění aplikace.
  9. Otevřete Správce úloh systému Windows. V aplikaci Visual Studio, zobrazí Výstupní okno zobrazit zprávy ladění. Klepněte na příkazové tlačítko a Všimněte si, že instance Excel.exe, zobrazí se v Procesy seznam.
  10. Instance aplikace Excel stále spouští v seznamu úkolů i Po dokončení aplikace v režimu spánku. Zavřete dialogové okno a Všimněte si, že Aplikace Excel nebude již zobrazena v Procesy seznam.
  11. Při implementaci kroky v části "Řešení", ukončení aplikace sady Office po jeho vydání poslední proměnné. Nahradit funkce v kroku 5 s následujícím kódem:
      Private Sub NAR(ByVal o As Object)
        Try
          System.Runtime.InteropServices.Marshal.ReleaseComObject(o)
        Catch
        Finally
          o = Nothing
        End Try
      End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim oApp As New Excel.Application()
        Dim oBooks As Excel.Workbooks = oApp.Workbooks
        Dim oBook As Excel.Workbook = oBooks.Add
        Dim oSheet As Excel.Worksheet = oApp.ActiveSheet
    
        NAR(oSheet)
        oBook.Close(False)
        NAR(oBook)
        NAR(oBooks)
        oApp.Quit()
        NAR(oApp)
    
        Debug.WriteLine("Sleeping...")
        System.Threading.Thread.Sleep(5000)
        Debug.WriteLine("End Excel")
    End Sub
    					
Pokud používáte aplikaci Visual C#.NETTO, referenční kód NAR() funkce:
private void NAR(object o)
{
    try 
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
    }
    catch {}
    finally 
    {
        o = null;
    }
}

Poradce při potížích

Všimněte si, že provedete kroky, které jsou popsány v "Postup Reproduce chování" a server stále není ukončen dolů, můžete použít GC.Collect() Metoda a GC.WaitForPendingFinalizers() Metoda po vydání poslední objekt. Protože modulu runtime provádí úklid RCW, GC.Collect() metoda vynutí kolekcí uvolnění paměti ke spuštění a může uvolnit všechny odkazy, které má stále RCW. Na GC.Collect() Metoda se pokusí uvolnit maximální velikost paměti, která je k dispozici. Všimněte si, že to nezaručuje, že budou získány zpět veškeré paměti.

Vlastnosti

ID článku: 317109 - Poslední aktualizace: 19. května 2011 - Revize: 6.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Klíčová slova: 
kbautomation kbprb kbmt KB317109 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:317109

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com