Logige sisse Microsofti kontoga
Logige sisse või looge konto.
Tere!
Valige mõni muu konto.
Teil on mitu kontot
Valige konto, millega soovite sisse logida.

Vaadake muid tooteid, mille kohta see artikkel kehtib.

Sümptomid

Kui automatiseerite Microsoft Office Microsoft Visual Basic .NET-ist või Microsoft Visual C# .NET-ist, ei välju Office rakendus sulgemismeetodile helistamisel.

Põhjus

Kui Visual Studio .NET kutsub hallatavast koodist COM-objekti, loob see automaatselt Runtime Callable Wrapperi (RCW). RCW ðerifid helistavad .NET-i rakenduse ja COM-objekti vahel. RCW säilitab COM-objektil viitenumbri. Seega, kui kõik viited pole RCW-s välja antud, ei sulgu COM-objekt.

Lahendus

Veendumaks, et Office väljub, tehke kindlaks, kas teie automatiseerimiskood vastab järgmistele kriteeriumidele.

  • Deklareerige iga objekt uue muutujana. Näiteks muutke järgmist koodirida.

    oBook = oExcel.Workbooks.Add()
    

    Muutke see järgmiselt.

    dim oBooks as Excel.Workbooks
    oBooks = oExcel.Workbooks
    oBook = oBooks.Add()
    
  • Kui olete objekti kasutamise lõpetanud, kasutage tsükkel funktsiooni System.Runtime.InteropServices.Marshal.ReleaseComObject, kuni see tagastab väärtuse 0. System.Runtime.InteropServices.Marshal.ReleaseComObject eemaldab RCW viitenumbri ja tsükkel tagab, et aluseks olev COM-komponent vabastatakse sõltumata sellest, mitu korda see CLR-i uuesti sisestas.

  • Muutuja viite vabastamiseks määrake muutuja väärtuseks Ei midagi ega tühiväärtust.

  • Kasutage objekti Office sulgemismeetodit, et server sulgeda.

Olek

Selline käitumine on ette nähtud.

Lisateave

Käitumise taasesitamine

  1. Käivitage Visual Studio .NET.

  2. Klõpsake menüü Fail käsku Uus ja seejärel nuppu Project. Valige Visual Basic Projektid Windows Rakendus ja seejärel klõpsake nuppu OK.

    Märkus Form1 luuakse vaikimisi.

  3. Lisage viide Microsoft Excel teegile. Selleks toimige järgmiselt.

    1. Klõpsake Project käsku Lisa viide.

    2. Otsige vahekaardil COM üles Excel objektiteek.

      Microsoft Excel 2002: Microsoft Excel 10.0 Object LibraryNote

      Kui te pole seda veel teinud, soovitame alla laadida ja installida Microsoft Office XP primaarsed interop-komplektid (PIA-d).

      Xp pii-Office kohta lisateabe saamiseks külastage järgmist Microsofti teabebaasi (Knowledge Base) artiklit:

      328912 Microsoft Office XP esmased interop-komplektid (PIA-d) on allalaadimiseks saadaval
        2003 Microsoft Office Excel: Microsoft Excel 11.0 Object Library

    3. Valikute aktsepteerimiseks klõpsake dialoogiboksis Viidete lisamine nuppu OK.

  4. Klõpsake menüüs Vaade nuppu Tööriistakast ja seejärel lohistage nupu juhtelement vormile Form1.

  5. Topeltklõpsake nuppu Button1.

    Märkus Kuvatakse vormi koodiaken.

  6. Lisage form1.vb ülaserva järgmine kood:

    Imports Microsoft.Office.Interop
    
  7. Asendage koodiaknas järgmine kood:

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

    Asendage järgmine kood:

    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. Rakenduse käivitamiseks vajutage klahvi F5.

  9. Avage Windows Tegumihaldur. Kui Visual Studio, kuvage silumissõnumite kuvamiseks aken Väljund. Klõpsake käsunuppu. Pange tähele, et Excel.exe kuvatakse loendis Protsessid.

  10. Excel käivitatakse ülesandeloendis ka pärast seda, kui rakendus on uneaja lõpetanud. Sulgege dialoogiboks ja pange tähele, Excel ei ole enam loendis Protsessid.

  11. Kui teete jaotises "Eraldusvõime" toodud juhiseid, Office rakendus pärast viimase muutuja vabastamist. Asendage funktsioon 5. juhises järgmise koodi abil.

      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
    

Kui kasutate Visual C# .NET-i, siis viide funktsiooni NAR() koodile.

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

Märkus. Alates .NET raamistik 2.0-st saate sama tulemuse saavutamiseks kasutada system.Runtime.InteropServices.Marshal.FinalReleaseComObjecti, mitte seda, kui helistate loopimisel system.Runtime.InteropServices.Marshal.ReleaseComObject.
 

Tõrkeotsing

Märkus. Kui järgite jaotises "Käitumise reprodutseerimise juhised" kirjeldatud juhiseid ja server ei sulgu endiselt, saate kasutada GC-d. Collect() meetod ja GC. WaitForPendingFinalizers() meetod pärast viimase objekti vabastamist. Kuna käitusaeg täidab RCW-s rämpsfailide kogumist, teeb GC. Collect() meetod sunnib prügikogujat käitama ja võib vabastada RCW-le alles salvestatud viited. The GC. Collect() meetod proovib saadaolevat maksimaalset mälumahtu tagasi nõuda. Pange tähele, et see ei taga, et kogu mälu taastatakse.

Kehtib:

See artikkel kehtib ka järgmiste toodete kohta:

  • Microsoft Visual Basic .NET (kõik versioonid)

  • Microsoft Visual C# .NET (kõik versioonid)

  • Microsoft Office 2016 (kõik versioonid)

  • Microsoft Office 2013 (kõik versioonid)

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.

Kogukonnad aitavad teil küsimusi esitada ja neile vastuseid saada, anda tagasisidet ja saada nõu rikkalike teadmistega asjatundjatelt.

Kas sellest teabest oli abi?

Kui rahul te keelekvaliteediga olete?
Mis mõjutas teie hinnangut?
Kui klõpsate nuppu Edasta, kasutatakse teie tagasisidet Microsofti toodete ja teenuste täiustamiseks. IT-administraator saab neid andmeid koguda. Privaatsusavaldus.

Täname tagasiside eest!

×