Menyebarkan komponen COM dengan ClickOnce

Penyebaran komponen COM warisan sudah lama merupakan tugas yang sulit. Komponen perlu didaftarkan secara global dan dengan demikian dapat menyebabkan efek samping yang tidak diinginkan antara aplikasi yang tumpang tindih. Situasi ini umumnya tidak menjadi masalah dalam aplikasi .NET Framework karena komponen sepenuhnya terisolasi ke suatu aplikasi atau kompatibel untuk berdampingan. Visual Studio memungkinkan Anda menyebarkan komponen COM terisolasi pada sistem operasi Windows.

ClickOnce menyediakan mekanisme yang mudah dan aman untuk menyebarkan aplikasi .NET Anda. Namun, jika aplikasi Anda menggunakan komponen COM warisan, Anda harus mengambil langkah tambahan untuk menyebarkannya. Topik ini menjelaskan cara menyebarkan komponen COM yang terisolasi dan mereferensikan komponen asli (misalnya, dari Visual Basic 6.0 atau Visual C++).

Untuk informasi selengkapnya tentang menyebarkan komponen COM yang terisolasi, lihat Menyederhanakan Penyebaran Aplikasi dengan ClickOnce dan COM Bebas Pendaftaran.

COM bebas pendaftaran

COM bebas pendaftaran adalah teknologi baru untuk menyebarkan dan mengaktifkan komponen COM yang terisolasi. Ia bekerja dengan menempatkan semua pustaka jenis komponen dan informasi pendaftaran yang biasanya diinstal ke dalam registri sistem ke dalam file XML yang disebut manifes, disimpan dalam folder yang sama dengan aplikasi.

Mengisolasi komponen COM mengharuskan komponen terdaftar di komputer pengembang, tetapi tidak harus didaftarkan di komputer pengguna akhir. Untuk mengisolasi komponen COM, yang perlu Anda lakukan adalah mengatur properti Terisolasi referensinya ke True. Secara default, properti ini diatur ke False, menunjukkan bahwa properti ini harus diperlakukan sebagai referensi COM terdaftar. Jika properti ini True, hal ini menyebabkan manifes dihasilkan untuk komponen ini pada waktu build. Hal ini juga menyebabkan file yang sesuai disalin ke folder aplikasi selama penginstalan.

Ketika generator manifes menemukan referensi COM yang terisolasi, ia menghitung semua entri CoClass di pustaka jenis komponen, mencocokkan setiap entri dengan data pendaftaran yang sesuai, dan menghasilkan definisi manifes untuk semua kelas COM dalam file pustaka jenis.

Menyebarkan komponen COM bebas pendaftaran menggunakan ClickOnce

Teknologi penyebaran ClickOnce sangat cocok untuk menyebarkan komponen COM yang terisolasi, karena baik COM bebas pendaftaran dan ClickOnce mengharuskan komponen memiliki manifes untuk disebarkan.

Biasanya, pembuat komponen harus memberikan manifes. Namun, jika tidak, Visual Studio mampu menghasilkan manifes secara otomatis untuk komponen COM. Pembuatan manifes dilakukan selama proses Penerbitan ClickOnce; untuk informasi selengkapnya, lihat Menerbitkan Aplikasi ClickOnce. Fitur ini juga memungkinkan Anda memanfaatkan komponen warisan yang Anda tulis di lingkungan pengembangan sebelumnya seperti Visual Basic 6.0.

Ada dua cara ClickOnce menyebarkan komponen COM:

  • Menggunakan bootstrapper untuk menyebarkan komponen COM Anda; ini berfungsi pada semua platform yang didukung.

  • Menggunakan penyebaran isolasi komponen asli (juga dikenal sebagai COM bebas pendaftaran).

Contoh mengisolasi dan menyebarkan komponen COM sederhana

Untuk mendemonstrasikan penyebaran komponen COM bebas pendaftaran, contoh ini akan membuat aplikasi berbasis Windows di Visual Basic yang mereferensikan komponen COM asli terisolasi yang dibuat menggunakan Visual Basic 6.0, dan menyebarkannya menggunakan ClickOnce.

Pertama, Anda harus membuat komponen COM asli:

Untuk membuat komponen COM asli
  1. Menggunakan Visual Basic 6.0, dari menu File, klik Baru, lalu Proyek.

  2. Dalam kotak dialog Proyek Baru, pilih node Visual Basic, dan pilih proyek DLL ActiveX. Dalam kotak Nama, ketikkan VB6Hello.

    Catatan

    Hanya jenis proyek Kendali ActiveX dan DLL ActiveX yang didukung COM bebas pendaftaran; jenis proyek Dokumen ActiveX dan EXE ActiveX tidak didukung.

  3. Di Penjelajah Solusi, klik dua kali Class1.vb untuk membuka editor teks.

  4. Di Class1.vb, tambahkan kode berikut setelah kode yang dihasilkan untuk metode New:

    Public Sub SayHello()
       MsgBox "Message from the VB6Hello COM component"
    End Sub
    
  5. Bangun komponen. Dari menu Buat, pilih Buat Solusi.

Catatan

COM bebas pendaftaran hanya mendukung jenis proyek kontrol COM dan DLL. Anda tidak dapat menggunakan EXE dengan COM bebas pendaftaran.

Sekarang Anda dapat membuat aplikasi berbasis Windows dan menambahkan referensi ke komponen COM ke dalamnya.

Untuk membuat aplikasi berbasis Windows menggunakan komponen COM
  1. Menggunakan Visual Basic, dari menu File, klik Baru, lalu Proyek.

  2. Dalam kotak dialog Proyek Baru, pilih node Visual Basic, dan pilih Aplikasi Windows. Dalam kotak Nama, ketikkan RegFreeComDemo.

  3. Di Penjelajah Solusi, klik tombol Perlihatkan Semua File untuk menampilkan referensi proyek.

  4. Klik kanan node Referensi dan pilih Tambahkan Referensi dari menu konteks.

  5. Dalam kotak dialog Tambahkan Referensi, klik tab Telusuri, arahkan ke VB6Hello.dll, lalu pilih.

    Referensi VB6Hello muncul di daftar referensi.

  6. Arahkan ke Kotak Alat, pilih kontrol Tombol, dan seret ke formulir Form1.

  7. Di jendela Properti, atur properti Teks tombol ke Halo.

  8. Klik dua kali tombol untuk menambahkan kode handler, dan di file kode, tambahkan kode sehingga handler membaca sebagai berikut:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim VbObj As New VB6Hello.Class1
        VbObj.SayHello()
    End Sub
    
  9. Jalankan aplikasi lagi. Dari menu Debug, pilih Mulai Penelusuran Kesalahan.

    Selanjutnya Anda perlu mengisolasi kontrol. Setiap komponen COM yang digunakan aplikasi Anda direpresentasikan dalam proyek Anda sebagai referensi COM. Referensi ini terlihat di bagian node Referensi di jendela Penjelajah Solusi. (Perhatikan bahwa Anda dapat menambahkan referensi baik secara langsung menggunakan perintah Tambahkan Referensi pada menu Proyek, atau secara tidak langsung dengan menyeret kendali ActiveX ke formulir Anda.)

    Langkah-langkah berikut menunjukkan cara mengisolasi komponen COM dan menerbitkan aplikasi yang diperbarui yang berisi kontrol terisolasi:

Untuk mengisolasi komponen COM
  1. Di Penjelajah Solusi, di node Referensi, pilih referensi VB6Hello.

  2. Di jendela Properti, ubah nilai properti Terisolasi dari False menjadi True.

  3. Dari menu Buat, pilih Buat Solusi.

    Sekarang, ketika Anda menekan F5, aplikasi berfungsi seperti yang diharapkan, tetapi sekarang berjalan di bawah COM bebas pendaftaran. Untuk membuktikan hal ini, coba batalkan pendaftaran komponen VB6Hello.dll dan jalankan RegFreeComDemo1.exe di luar IDE Visual Studio. Kali ini ketika tombol diklik, ia masih berfungsi. Jika Anda mengganti nama manifes aplikasi untuk sementara waktu, ia akan kembali gagal.

Catatan

Anda dapat mensimulasikan tidak adanya komponen COM dengan membatalkan pendaftaran untuk sementara waktu. Buka perintah, buka folder sistem Anda dengan mengetik cd /d %windir%\system32, lalu batalkan pendaftaran komponen dengan mengetik regsvr32 /u VB6Hello.dll. Anda dapat mendaftarkannya lagi dengan mengetik regsvr32 VB6Hello.dll.

Langkah terakhir adalah menerbitkan aplikasi menggunakan ClickOnce:

Untuk menerbitkan pembaruan aplikasi dengan komponen COM yang terisolasi
  1. Dari menu Buat, klik Terbitkan RegFreeComDemo.

    Wizard Terbitkan muncul.

  2. Di Wizard Terbitkan, tentukan lokasi di disk komputer lokal tempat Anda dapat mengakses dan memeriksa file yang diterbitkan.

  3. Klik Selesai untuk menerbitkan aplikasi.

    Jika Anda memeriksa file yang diterbitkan, Anda akan menyadari bahwa file sysmon.ocx disertakan. Kontrol benar-benar terisolasi ke aplikasi ini, yang berarti bahwa jika komputer pengguna akhir memiliki aplikasi lain yang menggunakan versi kontrol berbeda, itu tidak dapat mengganggu aplikasi ini.

Mereferensikan assembly asli

Visual Studio mendukung referensi ke assembly asli Visual Basic 6.0 atau C++; referensi tersebut disebut referensi asli. Anda dapat mengetahui apakah referensi itu asli dengan memverifikasi bahwa properti Jenis File diatur ke Asli atau ActiveX.

Untuk menambahkan referensi asli, gunakan perintah Tambahkan Referensi, lalu telusuri ke manifes. Beberapa komponen menempatkan manifes di dalam DLL. Dalam hal ini, Anda cukup memilih DLL itu sendiri dan Visual Studio akan menambahkannya sebagai referensi asli jika mendeteksi bahwa komponen tersebut berisi manifes yang disematkan. Visual Studio juga akan secara otomatis menyertakan assembly atau file dependen yang tercantum dalam manifes jika berada di folder yang sama dengan komponen yang direferensikan.

Isolasi kontrol COM memudahkan penyebaran komponen COM yang belum memiliki manifes. Namun, jika komponen disediakan dengan manifes, Anda dapat mereferensikan manifes secara langsung. Bahkan, Anda harus selalu menggunakan manifes yang disediakan oleh pembuat komponen sedapat mungkin daripada menggunakan properti Terisolasi.

Batasan penyebaran komponen COM bebas pendaftaran

COM bebas pendaftaran memberikan keuntungan yang jelas dibandingkan teknik penyebaran tradisional.

Tidak setiap komponen merupakan kandidat yang cocok untuk COM bebas pendaftaran. Suatu komponen tidak cocok jika salah satu hal berikut ini benar:

  • Komponen merupakan aplikasi mandiri yang dapat dieksekusi. Server EXE tidak didukung; hanya DLL yang didukung.

  • Komponen adalah bagian dari sistem operasi, atau merupakan komponen sistem, seperti XML, komponen browser, atau Komponen Akses Data Microsoft (MDAC). Anda harus mengikuti kebijakan redistribusi penulis komponen; tanyakan kepada vendor Anda.

  • Komponen adalah bagian dari aplikasi, seperti Microsoft Office. Misalnya, Anda tidak boleh mencoba mengisolasi Model Objek Microsoft Excel. Ini adalah bagian dari Office dan hanya dapat digunakan di komputer dengan produk Office lengkap terinstal.

  • Komponen dimaksudkan untuk digunakan sebagai add-in atau snap-in, misalnya add-in Office atau kontrol di browser Web. Komponen tersebut biasanya memerlukan semacam skema pendaftaran yang ditentukan oleh lingkungan hosting yang berada di luar cakupan manifes itu sendiri.

  • Komponen mengelola perangkat fisik atau virtual untuk sistem, misalnya, driver perangkat untuk print spooler.

  • Komponen ini dapat didistribusikan ulang Akses Data. Aplikasi data umumnya memerlukan pendistribusian ulang Akses Data terpisah untuk diinstal sebelum dapat berjalan. Anda tidak boleh mencoba mengisolasi komponen seperti Microsoft ADO Data Control, Microsoft OLE DB, atau Microsoft Data Access Components (MDAC). Sebaliknya, jika aplikasi Anda menggunakan MDAC atau SQL Server Express, Anda harus mengaturnya sebagai prasyarat; lihat Cara: Menginstal Prasyarat dengan Aplikasi ClickOnce.

    Dalam beberapa kasus, pengembang komponen mungkin dapat mendesain ulang komponen untuk COM bebas pendaftaran. Jika ini tidak memungkinkan, Anda masih dapat membangun dan menerbitkan aplikasi yang bergantung padanya melalui skema pendaftaran standar menggunakan Bootstrapper. Untuk informasi selengkapnya, lihat Membuat Paket Bootstrapper.

    Komponen COM hanya dapat diisolasi sekali per aplikasi. Misalnya, Anda tidak dapat mengisolasi komponen COM yang sama dari dua proyek Pustaka Kelas berbeda yang merupakan bagian dari aplikasi yang sama. Hal itu akan menghasilkan peringatan build dan aplikasi akan gagal dimuat pada saat eksekusi. Untuk menghindari masalah ini, Microsoft menyarankan agar Anda merangkum komponen COM dalam satu pustaka kelas.

    Ada beberapa skenario di mana pendaftaran COM diperlukan pada komputer pengembang, meskipun penyebaran aplikasi tidak memerlukan pendaftaran. Properti Isolated mengharuskan komponen COM didaftarkan pada komputer pengembang untuk menghasilkan manifes secara otomatis selama build. Tidak ada kemampuan penangkapan pendaftaran yang memanggil pendaftaran mandiri selama build. Selain itu, kelas apa pun yang tidak secara eksplisit didefinisikan dalam pustaka jenis tidak akan tercermin dalam manifes. Saat menggunakan komponen COM dengan manifes yang sudah ada sebelumnya, seperti referensi asli, komponen mungkin tidak perlu didaftarkan pada waktu pengembangan. Namun, pendaftaran diperlukan jika komponen adalah kendali ActiveX dan Anda ingin menyertakannya di Kotak Alat dan perancang Formulir Windows.