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ř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.
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.
Kroky pro reprodukci tohoto chování
- Spusťte aplikaci Visual Studio.NET.
- 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.
- Přidat odkaz na Knihovna objektů Microsoft Excel. Chcete-li to provést, postupujte takto:
- V Projekt nabídky, klepněte na tlačítko Přidat odkaz.
- 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:328912
(http://support.microsoft.com/kb/328912/
)
Microsoft 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 - Klepněte na tlačítko OK v Přidat odkazy Dialogové okno potvrďte výběr.
- V Zobrazení nabídky, klepněte na tlačítko Panel nástrojůa pak přetáhněte Tlačítko řízení na Formulář1.
- Poklepejte na položku Button1. Zobrazí se okno kód pro formulář.
- Následující kód přidejte na začátek Form1.vb:
Imports Microsoft.Office.Interop
- 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
- Stisknutím klávesy F5 pro spuštění aplikace.
- 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.
- 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.
- 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.
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
| kbautomation kbprb kbmt KB317109 KbMtcs |
Strojově přeložený článekDů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
(http://support.microsoft.com/kb/317109/en-us/
)