Aplikasi Office tidak berhenti setelah otomatisasi dari Visual Studio.NET klien

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 317109 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

GEJALA

Ketika Anda mengotomatisasi Microsoft Office aplikasi dari Microsoft Visual Basic.NET atau Microsoft Visual C#.NET, aplikasi Office tidak berhenti ketika Anda memanggil Berhenti metode.

PENYEBAB

Ketika Visual Studio.NET panggilan COM objek dari berhasil kode, secara otomatis membuat Runtime opsi beli Wrapper (RCW). RCW Marsekal panggilan antara.NET aplikasi dan objek COM. RCW membuat referensi count pada objek COM. Oleh karena itu, jika semua referensi belum dirilis pada RCW, objek COM tidak berhenti.

PEMECAHAN MASALAH

Untuk memastikan bahwa aplikasi Office berhenti, pastikan bahwa kode otomatisasi Anda memenuhi kriteria berikut:
  • Menyatakan setiap objek sebagai variabel baru. Misalnya, mengubah baris kode berikut
    oBook = oExcel.Workbooks.Add()
    					
    dengan berikut:
    dim oBooks as Excel.Workbooks
    oBooks = oExcel.Workbooks
    oBook = oBooks.Add()
    					
  • Penggunaan System.runtime.InteropServices.Marshal.ReleaseComObject Ketika Anda selesai menggunakan objek. Decrements ini referensi Bangsawan dari RCW.
  • Untuk mengeluarkan referensi ke variabel, tetapkan variabel sama dengan Tidak ada atau Null.
  • Penggunaan Berhenti metode dari objek aplikasi Office untuk memberitahu server untuk Matikan.

STATUS

Ini adalah aktivitas.

INFORMASI LEBIH LANJUT

Langkah-langkah mereproduksi perilaku

  1. Mulai Visual Studio.NET.
  2. Pada Berkas menu, klik Baru kemudian klik Project. Di bawah Proyek-proyek Visual Basic, pilih Aplikasi Windows dan klik Oke. Form1 dibuat secara default.
  3. Menambahkan referensi ke Perpustakaan objek Microsoft Excel. Untuk melakukannya, ikuti langkah-langkah berikut:
    1. Pada Project menu, klik Menambahkan referensi.
    2. Pada COM tab, mencari perpustakaan objek untuk Excel, dan kemudian klik Pilih.

      Microsoft Excel 2002: Perpustakaan objek Microsoft Excel 10,0

      Catatan Jika Anda tidak melakukannya, dianjurkan bahwa Anda men-download dan menginstal Microsoft Office XP utama Interop Majelis (PIAs). Untuk informasi tambahan tentang Office XP PIAs, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
      328912Microsoft Office XP utama interop Majelis (PIAs) tersedia untuk di-download
      Untuk Microsoft Office Excel 2003: Perpustakaan objek Microsoft Excel 11,0
    3. Klik Oke dalam Menambahkan referensi kotak dialog untuk menerima pilihan Anda.
  4. Pada Lihat menu, klik Toolbox, dan kemudian tarik Tombol kontrol ke Form1.
  5. Klik dua kali Button1. Jendela kode untuk bentuk muncul.
  6. Menambahkan kode berikut ke atas Form1.vb:
    Imports Microsoft.Office.Interop
    					
  7. Ganti kode berikut dalam jendela kode
        Private Sub Button1_Click(ByVal sender As System.Object, _
           ByVal e As System.EventArgs) Handles Button1.Click
        End Sub
    					
    dengan berikut:
    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. Tekan F5 untuk menjalankan aplikasi.
  9. Membuka Windows Task Manager. Dalam Visual Studio, menampilkan Keluaran jendela untuk melihat pesan debug. Klik tombol perintah dan catatan yang contoh Excel.exe muncul di Proses daftar.
  10. Contoh Excel masih berjalan dalam daftar tugas bahkan Setelah aplikasi selesai tidur. Tutup kotak dialog dan perhatikan bahwa Excel tidak lagi muncul dalam Proses daftar.
  11. Ketika Anda menerapkan langkah-langkah di bagian "Pemecahan masalah", aplikasi Office berhenti setelah rilis terakhir variabel. Menggantikan fungsi dalam langkah 5 dengan kode berikut:
      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
    					
Jika Anda menggunakan Visual C#.NET, referensi kode untuk NAR() fungsi:
private void NAR(object o)
{
    try 
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
    }
    catch {}
    finally 
    {
        o = null;
    }
}

Pemecahan Masalah

Catatan bahwa jika Anda mengikuti langkah-langkah yang dijelaskan dalam "Langkah untuk mereproduksi perilaku" bagian, dan server masih tidak menutup ke bawah, Anda dapat menggunakan GC.Collect() metode dan GC.WaitForPendingFinalizers() metode setelah Anda melepaskan objek terakhir. Karena runtime melakukan pengumpulan sampah di RCW, GC.Collect() metode pasukan garbage collector untuk menjalankan dan mungkin melepaskan setiap referensi yang RCW masih memiliki. The GC.Collect() metode mencoba untuk merebut kembali memori maksimum yang tersedia. Perhatikan bahwa ini tidak menjamin bahwa semua memori akan direklamasi.

Properti

ID Artikel: 317109 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • 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
Kata kunci: 
kbautomation kbprb kbmt KB317109 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:317109

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com