Vpišite se z Microsoftovim
Vpišite se ali ustvarite račun.
Pozdravljeni,
Izberite drug račun.
Imate več računov
Izberite račun, s katerim se želite vpisati.

Oglejte si druge izdelke, za katere velja ta članek.

Znaki

Ko avtomatizirate aplikacijo Microsoft Office iz programa Microsoft Visual Basic .NET ali Microsoft Visual C# .NET, se aplikacija Office ne zapre, ko pokličete način Quit.

Razlog

Ko Visual Studio .NET pokliče predmet COM iz upravljane kode, samodejno ustvari ovoj za oblačko Runtime Callable Wrapper (RCW). RCW kliče med aplikacijo .NET in predmetom COM. RCW šteje sklic na predmet COM. Če v rcW niso bili izdani vsi sklici, se predmet COM ne zapre.

Rešitev

Če se želite prepričati, Office program zapre avtomatizacijo, določite, ali vaša koda avtomatizacije izpolnjuje te pogoje:

  • Vsak predmet napove kot novo spremenljivko. Spremenite na primer to vrstico kode:

    oBook = oExcel.Workbooks.Add()
    

    Spremenite to v:

    dim oBooks as Excel.Workbooks
    oBooks = oExcel.Workbooks
    oBook = oBooks.Add()
    
  • Ko končate z uporabo predmeta, uporabite System.Runtime.InteropServices.².ReleaseComObject v zanki, dokler ne vrne 0. System.Runtime.InteropServices.Marshall.ReleaseComObject decrements the reference count of the RCW in zanka poskrbi, da je temeljna komponenta COM izdana, ne glede na to, kolikokrat je bila znova vnesena v clr.

  • Če želite sprostiti sklic na spremenljivko, nastavite spremenljivko na Nič ali Null.

  • Z metodo Quit predmeta Office, da ukinjate strežnik.

Stanje

To delovanje je privzeto.

Več informacij

Steps to reproduce the behavior

  1. Zaženite Visual Studio .NET.

  2. V meniju Datoteka kliknite Novo in nato kliknite Project. V Visual Basic projektih izberite Windows, nato pa kliknite V redu.

    Opomba Obrazec1 je privzeto ustvarjen.

  3. Dodajte sklic na knjižnico Microsoft Excel predmeta. To naredite tako:

    1. V Project kliknite Dodaj sklic.

    2. Na zavihku COM poiščite možnost Knjižnica Excel in kliknite Izberi.

      Za Microsoft Excel 2002: Microsoft Excel 10.0 Object LibraryNote

      Če tega še niste naredili, vam priporočamo, da prenesete in namestite Microsoft Office XP Primary Interop Assemblies (PIAs).

      Več informacij o Office s podatki XP najdete v tem članku iz Microsoftove zbirke znanja:

      328912 Microsoft Office primarne interop sklope XP (PIAs) so na voljo za prenos
        Za Microsoft Office Excel 2003: Microsoft Excel 11.0 Object Library

    3. V pogovornem oknu Dodajanje sklicev kliknite V redu, da sprejmete izbor.

  4. V meniju Pogled kliknite Komplet orodij in nato kontrolnik Gumb povlecite v obrazec1.

  5. Dvokliknite Gumb1.

    Opomba Prikaže se okno kode za obrazec.

  6. Na vrh možnosti Form1.vb dodajte to kodo:

    Imports Microsoft.Office.Interop
    
  7. V oknu kode zamenjajte to kodo:

        Private Sub Button1_Click(ByVal sender As System.Object, _
           ByVal e As System.EventArgs) Handles Button1.Click
        End Sub
    

    Nadomestite to kodo:

    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. Pritisnite tipko F5, da zaženete program.

  9. Odprite Windows opravil. V Visual Studio, display the Output window to see the debug messages. Kliknite ukazni gumb. Opazite lahko, da je primerek Excel.exe prikazan na seznamu Procesi.

  10. Primerek opravil Excel se še vedno izvaja na seznamu opravil, tudi ko aplikacija konča speči. Zaprite pogovorno okno in opazili boste, Excel ni več prikazano na seznamu Procesi.

  11. Ko sledite korakom v razdelku »Ločljivost«, se aplikacija Office zapre, ko sprosti zadnjo spremenljivko. Zamenjajte funkcijo v 5. koraku tako, da uporabite to kodo:

      Private Sub NAR(ByVal o As Object)
        Try
          While (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0)
          End While
        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
    

Če uporabljate Visual C# .NET, se sklica na kodo za funkcijo NAR():

private void NAR(object o)
{
    try 
    {
        while (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0) ;
    }
    catch {}
    finally 
    {
        o = null;
    }
}

Opomba Od ogrodje .NET Framework 2.0 naprej lahko za doseganje enakega rezultata uporabite System.Runtime.InteropServices.Marshall.FinalReleaseComObject namesto zanke za klicanje System.Runtime.InteropServices.Marshall.ReleaseComObject.
 

Odpravljanje težav

Opomba Če upoštevate navodila, opisana v razdelku »Steps to Reproduce the Behavior« (Navodila za ponovno prinovljivost delovanja), vendar se strežnik še vedno ne zaustavi, lahko uporabite GC. Način Collect() in GC. Način »WaitForPendingFinalizers()« po tem, ko spustite zadnji predmet. Ker izvajalnik na RCW, GC izvaja zbirko s košem. Metoda Collect() prisili koša za zagon in lahko sprosti vse sklice, ki jih ima RCW. The GC. Način Collect() poskuša znova prevzame največji dovoljeni pomnilnik, ki je na voljo. Opazite lahko, da s tem ne jamčite, da bo znova zahtevana zahteva vsega pomnilnika.

Velja za

Ta članek velja tudi za:

  • Microsoft Visual Basic .NET (vse izdaje)

  • Microsoft Visual C# .NET (vse izdaje)

  • Microsoft Office 2016 (vse izdaje)

  • Microsoft Office 2013 (vse izdaje)

Ali potrebujete dodatno pomoč?

Ali želite več možnosti?

Raziščite ugodnosti naročnine, prebrskajte izobraževalne tečaje, preberite, kako zaščitite svojo napravo in še več.

Skupnosti vam pomagajo postaviti vprašanja in odgovoriti nanje, posredovati povratne informacije in prisluhniti strokovnjakom z bogatim znanjem.

Vam je bila informacija v pomoč?

Kako ste zadovoljni s kakovostjo jezika?
Kaj je vplivalo na vašo izkušnjo?
Če pritisnete »Pošlji«, bomo vaše povratne informacije uporabili za izboljšanje Microsoftovih izdelkov in storitev. Vaš skrbnik za IT bo lahko zbiral te podatke. Izjavi o zasebnosti.

Zahvaljujemo se vam za povratne informacije.

×