Makale numarası: 317109 - Son Gözden Geçirme: 03 Eylül 2004 Cuma - Gözden geçirme: 4.2

Office uygulaması Visual Studio. NET'in istemciden Otomasyon sonra çıkın

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Belirtiler

Microsoft Visual Basic .NET veya Microsoft Visual C# .NET, Microsoft Office uygulamasını otomatikleştirmek için Çıkış yöntemini çağırdığınızda Office uygulamadan çıkın değil.

Neden

Visual Studio. NET'in Yönetilen koddan bir COM nesnesi çağırdığında ã‡alýã¾ma Zamaný Modülü çağrı Wrapper (RCW) otomatik olarak oluşturur. RCW .NET uygulaması ve COM nesnesi arasındaki aramaları s?ralar. RCW bir başvuru üzerinde COM nesnesi tutar. Tüm başvurular üzerinde RCW serbest bırakılmamıştır, bu nedenle, COM Nesne çıkın değil.

Çözüm

Office uygulama sonlandırılıyor, emin olmak için Otomasyon kodunuzu aşağıdaki ölçütü karşıladığından emin olun:
  • Her nesne için yeni bir değişken olarak bildirir. Örneğin, <a1>Kod</a1>
    oBook = oExcel.Workbooks.Add()
    					
    aşağıdaki:
    dim oBooks as Excel.Workbooks
    oBooks = oExcel.Workbooks
    oBook = oBooks.Add()
    					
  • Bir nesne kullanarak bitirdiğinizde System.Runtime.InteropServices.Marshal.ReleaseComObject kullanın. Başvuru sayısı RCW bu azaltır.
  • Değişken için başvuru serbest bırakmak için <a0></a0>, değişken eşittir Nothing veya boş olarak ayarlayın.
  • Sunucuyu kapanmaya bildirmek için Office uygulama nesnesi <a1>quit</a1> yöntemini kullanın.

Durum

Bu davranış tasarım yüzündendir.

Daha fazla bilgi

Davranışı Yeniden Oluşturma Adımları

  1. Visual Studio .NET'i başlatın.
  2. Dosya menüsünde Yeni'yi tıklatın ve Project ' ı tıklatın. Visual Basic Projeleri altında Windows Application seçin ve Tamam ' ı tıklatın. Varsayılan olarak, Form1 oluşturulur.
  3. Microsoft Excel nesne kitaplığı ' na bir başvuru ekleyin. Bunu yapmak için şu adımları izleyin:
    1. Proje) menüsünde Add Reference ' ı tıklatın.
    2. COM sekmesinde, Excel nesne kitaplığı bulun ve sonra da <a2>Seç</a2>'i tıklatın.

      Microsoft Excel 2002'de: Microsoft Excel 10.0 Nesne Kitaplığı

      Not Önceden yapmadıysanız, karşıdan yükleyin ve Microsoft Office XP Primary ınterop Assemblies (Pıa) yüklemeniz önerilir. Office XP Pıa hakkında'ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
      328912  (http://support.microsoft.com/kb/328912/ ) Microsoft Office XP ana birlikte çalışma derlemeleri (PIA) karşıdan yüklenebilir
      Microsoft Excel 11.0 Nesne Kitaplığı için Microsoft Office Excel 2003:
    3. Seçimlerinizi kabul etmek için Tamam <a0>Başvuru Ekle</a0> iletişim kutusunda tıklatın.
  4. Görünüm menüsünden araç kutusu ' nu tıklatın ve sonra bir Düğme Form1 sürükleyip.
  5. Button1</a1> çift tıklatın. Formun kod penceresi görüntülenir.
  6. Aşağıdaki kodu Form1.vb en üstüne ekleyin:
    Imports Microsoft.Office.Interop
    					
  7. Aşağıdaki kod kod penceresinde
        Private Sub Button1_Click(ByVal sender As System.Object, _
           ByVal e As System.EventArgs) Handles Button1.Click
        End Sub
    					
    aşağıdaki:
    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. Uygulamayı çalıştırmak için F5 tuşuna basın.
  9. Görev Yöneticisi'ni açın. Visual Studio'da hata ayıklama iletileri görmek için çıktı penceresini görüntüleyin. Komut düğmesini tıklatın ve bir örneğini Excel.exe işlemler listesinde göründüğünü unutmayın.
  10. Uyku uygulama bile tamamlandıktan sonra Excel örneği, görev listesinde hala çalışır. Iletişim kutusunu kapatmak ve Excel artık işlemler listesinde göründüğünü unutmayın.
  11. "Çözüm" bölümünde adımları uygulamak için Office uygulaması, son değişken yayımlandıktan sonra'nden çıkar. Adım 5'te işlevi aşağıdaki kodla değiştirin:
      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
    					
Visual C# .NET'i kullanıyorsanız, NAR() işlev kodu başvurusu:
private void NAR(object o)
{
    try 
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
    }
    catch {}
    finally 
    {
        o = null;
    }
}

SORUN GİDERME

Son nesne serbest sonra "Adım için oluşturma davranışı" bölümünde anlatılan adımları ve sunucunun hala kapatılmıyor, GC.Collect() yöntemi ve GC.WaitForPendingFinalizers() yöntemi kullanabileceğinizi unutmayın. Çal??ma zaman? üzerinde RCW atık toplama işlemi gerçekleştiren GC.Collect() yöntemi çöp toplayıcısını çalıştırmak için zorlar ve RCW hala sahip herhangi bir ba?vuru serbest. Kullanılabilir en fazla belleği geri kazanmak GC.Collect() yöntemi çalışır. Bu tüm bellek iadesi garantilemez olduğunu unutmayın.

Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbautomation kbprb KB317109 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:317109  (http://support.microsoft.com/kb/317109/en-us/ )