Makale Özeti

Mobil Projelerin kurulumları yalnızca CAB dosyasından mı oluşur? ActiveSync ile uyumlu, dolayısıyla host tarafından kontrol edilebilen install paketleri hazırlamak, CAB dosyalarını ve setup projelerini etkin olarak kullanmaktan geçer. Uyumluluk için nasıl bir setup projesi yapabileceğimizi inceleyelim.

Makale

    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 :

  • Program kurulumunda her mobil işlemci tipine göre oluşturduğumuz .CAB dosyalarını PC ye kopyalamalıyız.
  • Gerekli ise (var ise) programımızın PC tarafında calışacak kısmını kurmalıyız.
  • Uygun .CAB dosyasını bularak ActiveSync'a oradan da mobil cihaza göndermeliyiz.

    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.

Solution Explorer

    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.

Custom Actions Editor

 

 

 

 

 

    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.

Kaynak kodlar