ClickOnce ile COM Bileşenleri Dağıtma
Eski COM Bileşenlerinin dağıtımı geleneksel olarak zor bir görev olmuştur. Bileşenlerin genel olarak kaydedilmesi gerekir ve böylece bileşenler örtüşen uygulamalar arasında istenmeyen yan etkilere neden olabilir. Bu durum genellikle .NET Framework uygulamalarında bir sorun teşkil etmez çünkü bileşenler bir uygulamaya ayrılmıştır veya yan yana uyumludur. Visual Studio Windows XP veya daha yüksek işletim sistemi üzerinde ayrılmış COM bileşenleri dağıtımına olanak sağlar.
ClickOnce .NET uygulamaları dağıtımı için kolay ve güvenli bir mekanizma sağlar. Ancak uygulamalarınız eski COM bileşenleri kullanıyorsa, bunların dağıtımı için ek adımlar uygulamak gerekir. Bu konu COM bileşenlerinin ve referans yerel bileşenlerin nasıl dağıtılacağını açıklar (örneğin, Visual Basic 6.0 veya Visual C++).
Yalıtılmış com bileşenlerini dağıtma hakkında daha fazla bilgi için bkz: "Basitleştir uygulama dağıtımı ile ClickOnce ve com kayıt serbest" en https://msdn.microsoft.com/msdnmag/issues/05/04/RegFreeCOM/default.aspx.
Kayıtsız COM
Kayıtsız COM ayrılmış COM bileşenlerini etkinleştirme ve dağıtmak için yeni bir teknolojidir. Genellikle kayıt defteri içine yüklenen kayıt bilgisini ve bileşenin tüm tür kitaplığını, uygulama ile aynı klasörde depolanan ve bildirim olarak adlandırılan bir XML dosyasına yerleştirerek çalışır.
Bir COM bileşenini ayrıştırma geliştiricinin makinesinde kaydedilmesini gerektirir, ancak son kullanıcının bilgisayarında kaydedilmesine gerek yoktur. Bir COM bileşenini ayırmak için yapmanız gereken, başvurusunun Isolated özelliğini True olarak ayarlamak. Varsayılan değer olarak, kayıtlı COM referansı olarak değerlendirilmesi gerektiğine işaret eden False seçili ayarlanmıştır. Bu özellik True ise, yapı anında bu bileşen için oluşturulacak bir bildirime neden olur. Yükleme sırasında karşılık gelen dosyaların uygulama klasörüne kopyalanmasına da sebep olur.
Bildirim oluşturucu ayrılmış bir COM başvurusuna rastladığında, bileşenin tür kitaplığında yer alan tüm CoClass girdilerini numaralandırır; bu her girdiyi karşılık gelen kayıt verisiyle eşleştirir ve tür kitaplığı dosyasında bulunan tüm COM sınıfları için bildirim tanımları oluşturur.
Kayıtsız COM Bileşenlerini ClickOnce Kullanarak Dağıtma
ClickOnce dağıtım teknolojisi ayrılmış COM bileşenleri dağıtımı için oldukça uygundur çünkü hem ClickOnce hem de kayıtsız COM, dağıtılabilmek için bir bildirime sahip bileşene ihtiyaç duyar.
Genel olarak, bileşenin yazarı bir bildirim sağlamalıdır. Bunun yapılmaması durumunda, Visual Studio otomatik olarak COM bileşeni için bir bildirim oluşturma yeteneğine sahiptir. Bildirim oluşturulması ClickOnce Yayımla işlemi sırasında gerçekleştirilir; daha fazla bilgi için bkz. Yayımlama ClickOnce uygulamaları. Bu özellik Visual Basic 6.0 gibi önceki geliştirme ortamlarında yazılmış eski bileşenleri kullanmanızı sağlar.
ClickOnce COM bileşenlerini iki farklı yöntemle dağıtır:
COM bileşenlerinizi dağıtmak için önyükleyici kullanın; bu, desteklenen tüm platformlarda çalışır.
Yerel bileşen yalıtımı (kayıtsız COM olarak da bilinen) dağıtımını kullanın. Ancak, bu yalnızca Windows XP veya daha yüksek işletim sistemi üzerinde çalışır.
Basit Com Bileşeninin Yalıtılması ve Dağıtılması Örneği
Kayıtsız COM bileşeni dağıtımı göstermek için, bu örnek Visual Basic 6.0 kullanarak oluşturulan ve bunu ClickOnce kullanarak dağıtan, ayrılmış yerel bir COM bileşene referans eden bir Windows tabanlı uygulamayı Visual Basic üzerinde yaratacak.
Önce yerel COM bileşeni oluşturmanız gerekir:
Yerel bir COM bileşeni oluşturmak için
Visual Basic 6.0 kullanarak, Dosya menüsünden Yeni, sonra Proje'yi tıklayın.
Yeni Proje iletişim kutusunda Visual Basic düğümünü seçin ve ActiveX DLL projesi seçin. Ad kutusuna, VB6Hello yazın.
Not
Kayıtsız COM ile yalnızca ActiveX DLL ve ActiveX Control proje türleri desteklenir; ActiveX EXE ve ActiveX Document proje türleri desteklenmez.
Çözüm Gezgini içinde, metin düzenleyicisini açmak için Class1.vb'ye çift tıklayın.
Class1.vb içinde New yöntemi için oluşturulan koddan sonra aşağıdaki kodu ekleyin:
Public Sub SayHello() MsgBox "Message from the VB6Hello COM component" End Sub
Bileşeni oluşturun. Build (Yapı) menüsünde, Build Solution'ı (Çözümü Derle) tıklayın.
Not
Kayıtsız COM yalnızca DLL'leri COM kontrolleri proje türlerini destekler.Kayıtsız COM ile EXE'leri kullanamazsınız
Şimdi Windows tabanlı bir uygulama oluşturabilir ve COM bileşenine bir referans ekleyebilirsiniz.
COM bileşenini kullanarak Windows tabanlı bir uygulama oluşturmak için
Visual Basic 6.0 kullanarak, Dosya menüsünden Yeni, sonra Proje'yi tıklayın.
Yeni Proje iletişim kutusunda VisualBasic düğümünü, ardından Windows Uygulaması'nı seçin. Ad kutusuna, RegFreeComDemo yazın.
Çözüm Gezgini içinde, Tüm Dosyaları Göster düğmesini proje başvurularını görüntülemek için tıklayın.
Başvurular düğümünü sağ tıklayın ve içerik menüsünden Referans Ekle'yi seçin.
Referans Ekle iletişim kutusunda, Gözat sekmesini tıklayın, VB6Hello.dll'e gidin ve bunu seçin.
Bir VB6Hello referansı, referanslar listesinde görüntülenir.
Araç Kutusu üzerine gelin, bir Düğme denetimi seçin ve bunu Form1'e sürükleyin.
İçinde özelliklerini penceresinde ayarlamanız düğmenin metin Merhaba özelliği.
İşleyici kod eklemek için düğmeyi çift tıklayın ve kod dosyasında, kodu ekleyin. Böylece işleyici aşağıdaki gibi okusun:
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
Uygulamayı çalıştırın. Hata Ayıkla menüsünden, Start Debugging'i tıklayın.
Sonra denetimi ayırmanız gerekir. Uygulamanızın kullandığı her COM bileşeni projenizde bir COM referansı olarak temsil edilir. Çözüm Gezgini penceresinde Refreanslar düğümü altında bu referanslar görülebilir. (Dikkat ederseniz, ya doğrudan Proje menüsünde Referans Ekle komutunu kullanarak ya da dolaylı olarak bir ActiveX denetimini formunuzun üstüne sürükleyerek referanslar ekleyebilirsiniz.)
Aşağıdaki adımlar, COM bileşenini nasıl ayıracağınızı ve ayrılmış denetimi içeren güncelleştirilmiş uygulamayı nasıl yayınlayabileceğinizi gösterir:
Bir COM bileşenini ayırmak için
Çözüm Gezgini'nde bulunan Başvurular düğümünde, VB6Hello referansını seçin.
Özellikler penceresinde, Ayrılmış (Isolated) özellik değerini False'tan True'ya çevirin.
Build (Yapı) menüsünde, Build Solution'ı (Çözümü Derle) tıklayın.
Bu anda, F5'e bastığınız zaman uygulama beklendiği gibi çalışır fakat şimdi kayıtsız COM altında çalışıyor. Bunu kanıtlamak için, VB6Hello.dll bileşeninin kaydını silmeyi ve RegFreeComDemo1.exe'yi Visual Studio IDE dışından çalıştırmayı deneyin. Bu kez düğmeye tıklandığında, hala çalışır. Uygulama bildirimini geçici olarak yeniden adlandırırsanız, tekrar başarısız olacaktır.
Not
Geçici olmak üzere kaydını silerek, COM bileşeni olmadığı benzetimini yapabilirsiniz.Komut istemi açın, cd /d %windir%\system32 yazarak sistem klasörünüze gidin ve sonra regsvr32 /u VB6Hello.dll yazarak bileşen kaydını kaldırın.Bunu yeniden regsvr32 VB6Hello.dll yazarak kaydedebilirsiniz.
Son adım ClickOnce kullanarak uygulamayı yayımlamak:
Ayrılmış COM bileşeni ile bir uygulama güncelleştirmesi yayımlamak
Yapı menüsünden, RegFreeComDemo Yayımla'yı tıklayın.
Yayımla Sihirbazı görüntülenir.
Yayımla Sihirbazı'nda, yayımlanmış dosyalara erişebileceğiniz ve dosyaları inceleyebileceğiniz, yerel bilgisayarın diski üzerinde bir konum belirtin.
Uygulamayı yayımlamak için Son'u tıklayın.
Yayımlanmış dosyaları incelerseniz, sysmon.ocx dosyasının dahil olduğunu göreceksiniz. Denetim tamamen bu uygulamaya ayrılmıştır. Bu, son kullanıcının makinası, denetimin farklı bir sürümünü kullanan başka uygulamaya sahipse bu uygulamayı etkileyemeyeceği anlamına gelir.
Yerel Derlemelere (Assemblies) Başvuru
Visual Studio yerel Visual Basic 6.0 veya C++ derlemelerine yapılan referansları destekler; bunlar yerel referanslar olarak adlandırılır. Bir referansın Dosya Türü özelliğinin Yerel veya ActiveX olarak ayarlandığını doğrulayarak yerel olup olmadığını anlayabilirsiniz.
Yerel bir başvuru eklemek için, Referans Ekle komutunu kullanın sonra bildirime gözatın. Bazı bileşenler bildirimi DLL içine yerleştirir. Bu durumda, basitçe DLL'in kendisini seçebilirsiniz ve Visual Studio gömülü bir bildirim içeren bileşen algılarsa bunu yerel bir başvuru olarak ekleyecektir. Bağımlı dosyalar veya bildirim içinde listelenmiş derlemeler başvurulan bileşenler gibi aynı dosyadalarsa, Visual Studio aynı zamanda bunları dahil edecektir.
COM control isolation bildirimlere sahip olmayan COM bileşenlerinin dağıtımını kolaylaştırır. Ancak, bileşen bir bildirimle sağlanırsa, bildirime doğrudan başvurabilirsiniz. Aslında, mümkün oldukça Isolated özelliğini kullanmaktansa bileşenin yazarı tarafından sağlanan bildirimi kullanmalısınız.
Kayıtsız COM Bileşeni Dağıtımında Kısıtlamalar
Kayıtsız COM geleneksel dağıtım teknikleri ile kıyaslandığında açık avantajlara sahiptir. Ancak, işaret edilmesi gereken bazı sınırlamalar ve uyarılar vardır. En büyük sınırlama yalnızca Windows XP veya daha üst işletim sisteminde çalışıyor olması. Gerekli kayıtsız COM'un uygulaması çekirdek işletim sistemine yüklenen bileşenlere göre değişir. Ne yazık ki kayıtsız COM için alt düzey destek katmanı bulunmamaktadır.
Her bileşen kayıtsız COM için uygun bir aday değildir. Aşağıdakilerden herhangi biri doğruysa, bileşen uygun değildir:
Bileşen işlem dışı bir sunucudur. EXE sunucular desteklenmez; yalnızca DLL'ler desteklenir.
Bileşen işletim sisteminin bir parçası veya XML, Internet Explorer, Microsoft Veri Erişim Bileşenleri (MDAC) gibi bir sistem bileşenidir. Bileşen yazarının yeniden dağıtım ilkesini takip etmelisiniz; satıcınızla denetleyin.
Microsoft Office gibi bir uygulama parçası bileşenidir. Örneğin, Microsoft Excel Nesne Modeli'ni ayırmaya çalışmamalısınız. Bu, Office'in bir parçası ve yalnızca tam Office ürünü yüklü bir bilgisayarda kullanılabilir.
Bileşen bir eklenti veya ek bileşen olarak kullanılmak üzere hazırlanmıştır. Örneğin; bir Office eklentisi veya Web tarayıcısında bir denetim Bu bileşenler genellikle bildirimin kendi kapsamının ötesinde sunucu ortamı tarafından tanımlanan bir çeşit kayıt düzenini gerektirir.
Bileşen sistem için fiziksel ya da sanal bir aygıtı yönetir. Örneğin, yazdırma biriktiricisi için bir aygıt sürücüsü.
Bileşen yeniden dağıtılabilir bir Veri Erişimidir. Veri uygulamaları genellikle çalıştırılmadan önce yüklenmesi için ayrı bir yeniden dağıtılabilir Veri Erişimi gerektirir. Microsoft ADO Data Control, Microsoft OLE DB veya Microsoft Data Access Components (MDAC) gibi bileşenleri ayırmaya çalışmamalısınız. Bunun yerine, uygulamanız MDAC veya SQL Server Express kullanıyorsa, bunları önkoşul olarak ayarlamalısınız. Bkz. Nasıl: yükleme önkoşulları ile ClickOnce uygulama
Bazı durumlarda, bileşen geliştiricisi kayıtsız COM için bunu yeniden tasarlayabilir. Bu mümkün değilse, hala Önyükleyici kullanarak standart kayıt düzeni arasından bunlara bağımlı uygulamalar yayımlayabilirsiniz. Daha fazla bilgi için bkz. Önyükleyici Paketleri Oluşturma.
Bir COM bileşeni, her uygulamada bir kez ayrılmış olabilir. Örneğin, aynı uygulama parçası olan iki farklı Sınıf Kitaplığı projesinden aynı COM bileşenini ayıramazsınız. Bunu yapmak bir yapı uyarısına neden olur ve çalıştırma sırasında yükleme başarısız olur. Bu sorunu önlemek için Microsoft, COM bileşenlerini tek bir sınıf kitaplığında kapsüllemenizi önerir.
Uygulama dağıtımının kayıt gerektirmemesine rağmen, geliştiricinin makinesinde COM kaydı gerektiren birkaç senaryo vardır. Isolated özelliği, yapı sırasında bildirimi otomatik oluşturmak için COM bileşeninin geliştiricinin makinasında kayıtlı olması gerekir. Yapı sırasında kendi kendine kaydı başlatacak kayıt yakalama yeteneği yoktur. Ayrıca, tür kitaplığında açıkça tanımlanmamış herhangi bir class bildirim içinde yansıtılmaz. Yerel referans gibi önceden varolan bir bildirim ile Com bileşeni kullanıldığında, bileşen için geliştirme anında kayıt gerekmeyebilir. Ancak bileşen ActiveX denetimiyse ve bileşeni Araç Kutusu ile Windows Form tasarımcısı içine eklemek istiyorsanız, kayıt gereklidir.