Merhabalar, bir çoğumuz mobil cihaz uygulamaları yaptığımızda deployment çözümlerini gözardı ederiz. Visual Studio'daki CabWiz'i kullanarak bir .CAB file oluşturur ve bu .CAB dosyasını pocket pc de calıştırıp programımızı deploy etmiş oluruz. Fakat aslında bu çok doğru bir yöntem değildir.
ActiveSync cihazımız üzerindeki tüm ayarları ve kurulu programları yönetmek için kullandığımız aracımız, dolayısıyla geliştirdiğimiz programlarımızın da ActiveSync'ı kullanarak sisteme kurulması gerekir. Biz de mobil cihaz uygulamalarımızı PC üzerinden ne şekilde kurabileceğimizi inceleyeceğiz.
Öncelikle, izleyeceğimiz yolu belirleyelim :
Bunları installation işlemi sırasında yapmalıyız. Dolayısı ile CustomAction olarak tanımladığımız bu işlemleri gercekleştirecek bir kontrol yazmalıyız.
Yeni bir VB.NET Class Library projesi oluşturup, projeye Component yapısında yeni bir dosya ekleyelim. Oluşturduğu Class'ı System.Configuration.Install.Installer classından türetelim. İçerisinde AfterInstall ve AfterUninstall eventlerini handle eden (yakalayan) metodları yazalım ve de bu metodlarda ActiveSync a bağlanıp gerekli .CAB dosyasını kuralım.
Öncelikle eventleri handle edelim:
Private Sub Installer_AfterInstall(ByVal sender As Object, ByVal e As System.Configuration.Install.InstallEventArgs) Handles MyBase.AfterInstall 'Application Manager'a parametre olarak verecegimiz setup.ini dosyasinin full pathini aliyoruz. Try Dim arg As String = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "Setup.ini") '.cab dosyasini yuklemek icin WinCE application manager'i calistiriyoruz. AppManagerCalistir(arg) Catch End Try End Sub
Private Sub Installer_AfterUninstall(ByVal sender As Object, ByVal e As System.Configuration.Install.InstallEventArgs) Handles MyBase.AfterUninstall ' AppManager’ı parametre göndermeden uninstall modda çalıştırıcaz. AppManagerCalistir(Nothing) End Sub
Bu metodlar, install ve unistall işlemleri başarıyla sonuçlandığında çalışarak, AppManager' ı çalıştırıp setup.ini dosyasını parametre olarak verecektir. Öyleyse, AppManagerCalistir() metodunu inceleyelim.
Private Sub AppManagerCalistir (ByVal arg As String) ' Application Manager’ın pathini registryden alalım. Dim RegPath As String = "Software\Microsoft\Windows\CurrentVersion\App Paths\CEAppMgr.exe" Dim key As RegistryKey = Registry.LocalMachine.OpenSubKey(RegPath) Dim appManager As String = CStr(key.GetValue("")) If Not (appManager Is Nothing) Then If arg Is Nothing Then Process.Start(""" & appManager & """) Else ' Uygulamayi calistiralim. Process.Start(""" & appManager & """, """ & arg & """)) End If Else MessageBox.Show("Application manager bulunamiyor.") End If End Sub
Peki, setup.ini dosyasının içinde ne yazıyor?
[CEAppManager] Version = 1.0 Component = App [App] Description = Projem CabFiles=Projem_PPC.ARM.CAB,Projem_PPC.ARMV4.CAB,Projem_PPC.X86.CAB,Projem_PPC.MIPS.CAB,Projem_PPC.SH3.CAB,Projem_PPC.WCE420X86.CAB
[App] tagı altında CabFile ların neler olduğunu belirtiyoruz ve AppMan. uygun olan Cab dosyasını bizim için seçiyor. Şimdi yapmamız gereken; yeni bir setup projesi eklemek ve de cab dosyalarımızı, setup.ini dosyasını ve de az önce yaptığımız installer projesinden oluşan installer.dll'i bu projeye ekliyoruz.
Ve sonuç olarak çözümümüz yanda görünen bir hal alıyor. Son olarak yapmamız gereken, Custom Action editorden oluşturduğumuz dll i çözüme göstermek olacaktır.
Eğer istenirse (daha sorunsuz bir setup projesi için) Launch Conditions'a "Software\Microsoft\Windows CE Services" registry değerinden ActiveSync'ın yüklü olup olmadığına dair bir condition koyulabilir.
Bu sayede, programımız ActiveSync üzerinden kurulur ve install / uninstall işlemleri, kurulu program kayıtları ActiveSync aracılığı ile yönetilebilir.
Herkese iyi calışmalar.