Microsoft hesabıyla oturum açın
Oturum açın veya hesap oluşturun.
Merhaba,
Farklı bir hesap seçin.
Birden çok hesabınız var
Oturum açmak istediğiniz hesabı seçin.

Bu makalenin geçerli olduğu diğer ürünlere bakın.

Belirtiler

Microsoft Microsoft Office .NET Visual Basic Microsoft Visual C# .NET'den bir Office uygulamasını otomatik hale gelirsiniz, Çıkış yöntemi çağrılsa bile Office uygulaması çıkışı olmaz.

Neden

.NET Visual Studio yönetilen koddan bir COM nesnesini çağırsa, otomatik olarak Runtime Çağırılabilir Paketlayıcı (RCW) oluşturur. RCW , .NET uygulamasıyla COM nesnesi arasındaki çağrıları onaylar. RCW, COM nesne üzerinde bir başvuru sayımı tutar. Bu nedenle, RCW'de tüm başvurular yayınlanmazsa COM nesnesi çıkar olmaz.

Çözüm

Uygulamanın çıkışını Office için, otomasyon kodunuzun aşağıdaki ölçütlere uygun olup olmadığını seçin:

  • Her nesneyi yeni değişken olarak bildirebilirsiniz. Örneğin, aşağıdaki kod çizgisini değiştirebilirsiniz:

    oBook = oExcel.Workbooks.Add()
    

    Bunu aşağıdakiyle değiştirebilirsiniz:

    dim oBooks as Excel.Workbooks
    oBooks = oExcel.Workbooks
    oBook = oBooks.Add()
    
  • Bir nesne kullanmayı bitirdikten sonra 0 döndürene kadar System.Runtime.InteropServices.Cog.ReleaseComObject'i döngüde kullanın. System.Runtime.InteropServices.Cog.ReleaseComObject, RCW'nin başvuru sayısını belirtir ve döngü, CLR'ye kaç kez yeniden girmiş olursa olsun temel COM bileşeninin yayınlanır.

  • Değişkenin başvurularını serbest bırakmak için, değişkeni Hiçbir şey veya Null değerine eşit olarak ayarlayın.

  • Office uygulama nesnesinin Çık yöntemini kullanarak sunucuyu kapatmasını söyleyin.

Durum

Bu davranış tasarımdan kaynaklanır.

Daha Fazla Bilgi

Davranışı yeniden oluşturma adımları

  1. .NET Visual Studio'i başlatma.

  2. Dosya menüsünde Yeni'ye tıklayın ve sonra da Tamam'a Project. Proje Visual Basic altında Uygulama Ekle Windows i seçin ve Tamam'a tıklayın.

    Not Form1 varsayılan olarak oluşturulur.

  3. Nesne Kitaplığı'nın Microsoft Excel ekleyin. Bunu yapmak için şu adımları izleyin:

    1. Ekle Project Başvuru Ekle'ye tıklayın.

    2. COM sekmesinde, dosyanın Nesne Kitaplığı'Excel seç'e tıklayın.

      Microsoft Excel 2002 için: Microsoft Excel 10.0 Nesne KitaplığıNote

      Bunu henüz yapmadısanız Microsoft Office XP Birincil Birlikte Çalışma Derlemeleri'ne (PIA) indirip yüklemenizi öneririz.

      XP PIA'ları Office daha fazla bilgi için aşağıdaki Microsoft Bilgi Bankası makalesine bakın:

      328912 Microsoft Office XP birincil birlikte çalışma derlemeleri (PIA) indirilebilir
        2003 Microsoft Office Excel için: Microsoft Excel 11.0 Nesne Kitaplığı

    3. Seçimlerinizi kabul etmek için Başvuru Ekle iletişim kutusunda Tamam'a tıklayın.

  4. Görünüm menüsünde Araç Kutusu'ne tıklayın ve bir Düğme denetimi öğesini Form1'e sürükleyin.

  5. Düğme1'e çift tıklayın.

    Not Formun kod penceresi görüntülenir.

  6. Form1.vb'nin en üstüne aşağıdaki kodu ekleyin:

    Imports Microsoft.Office.Interop
    
  7. Kod penceresinde aşağıdaki kodu değiştirin:

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

    Aşağıdaki kodu yerine kullanın:

    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 Windows'ni açın. Hata Visual Studio ayıklama iletilerini görmek için Çıkış penceresini görüntüleme. Komut düğmesine tıklayın. İşlemler listesinde bir Excel.exe örneğinin göründüğüne dikkat.

  10. Örneğin Excel uyku Excel bitirdikten sonra bile görev listesinde yine çalışır. İletişim kutusunu kapatın ve İşlemler listesinde Excel liste olmadığını fark ettiyebilirsiniz.

  11. "Çözüm" bölümündeki adımları uygulayınca, Office son değişkeni çıkarktan sonra uygulamadan çıkar. 5. Adımda işlevi aşağıdaki kodu kullanarak değiştirin:

      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
    

Visual C# .NET kullanıyorsanız NAR() işlevinin koduna bakın:

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

Not .NET Framework 2.0'dan başlayarak, aynı sonucu elde etmek için System.Runtime.InteropServices.Cog.FinalReleaseComObject döngü yerine System.Runtime.InteropServices.Cog.ReleaseComObject'i kullanabilirsiniz.
 

Sorun giderme

Yükleme dosyasının doğru sürümü ve sağlaması olduğunda Algıla ve Onar bu dosyanın üzerine kopyalamaz. "Davranışı Yeniden Oluşturma Adımları" bölümünde açıklanan adımları izlersiniz ve sunucu yine de kapanmazsa, GC kullanabilirsiniz. Collect() yöntemi ve OB (GC). Son nesneyi çıkardikten sonra WaitForPendingFinalizers() yöntemi. Çalışma zamanı RCW'de çöp koleksiyonu gerçekleştirdiği için GC. Collect() yöntemi çöp toplayıcıyı çalıştıracak şekilde güçler ve RCW'nin hala sahip olduğu başvuruları serbest bırakın. OB (OB). Collect() yöntemi, kullanılabilen en yüksek belleği geri almaya çalışır. Bunun, tüm belleğin geri tanınacaklarını garanti etmez.

Uygulandığı öğe

Bu makale aşağıdakiler için de geçerlidir:

  • Microsoft Visual Basic .NET (tüm sürümler)

  • Microsoft Visual C# .NET (tüm sürümler)

  • Microsoft Office 2016 (tüm sürümler)

  • Microsoft Office 2013 (tüm sürümler)

Daha fazla yardıma mı ihtiyacınız var?

Daha fazla seçenek mi istiyorsunuz?

Abonelik avantajlarını keşfedin, eğitim kurslarına göz atın, cihazınızın güvenliğini nasıl sağlayacağınızı öğrenin ve daha fazlasını yapın.

Topluluklar, soru sormanıza ve soruları yanıtlamanıza, geri bildirimde bulunmanıza ve zengin bilgiye sahip uzmanlardan bilgi almanıza yardımcı olur.

Bu bilgi yararlı oldu mu?

Dil kalitesinden ne kadar memnunsunuz?
Deneyiminizi ne etkiledi?
Gönder’e bastığınızda, geri bildiriminiz Microsoft ürün ve hizmetlerini geliştirmek için kullanılır. BT yöneticiniz bu verileri toplayabilecek. Gizlilik Bildirimi.

Geri bildiriminiz için teşekkürler!

×