Makale Özeti

Windows tabanlı uygulamaların dağıtımını ve kurulumunu kolaylaştırmak için Visual Studio 2005 ile birlikte ClickOnce geliyor. Bu program, Windows tabanlı uygulamaların dağıtımını ve kurulumunu kolaylaştırmak yanında mevcut web tabanlı uygulamaları da istemci uygulamaya dönüştürebilmektedir. Windows uygulamalarının HTTP üzerinden dağıtımı ve kurulumu ile ilgili teknolojiler .NET Framework’ün ilk versiyonlarından itibaren mevcuttu. Bu makale, Windows uygulamalarının avantajlarını ve ClickOnce’ın arkasında yatan dağıtım ve kurulum teknolojilerini irdelemektedir.

Makale

ClickOnce ile Windows Tabanlı Uygulamalara Dönüş

Giriş

Windows tabanlı uygulamaların dağıtımını ve kurulumunu kolaylaştırmak için  Visual Studio 2005 ile birlikte ClickOnce geliyor. Bu program, Windows tabanlı uygulamaların dağıtımını ve kurulumunu kolaylaştırmak yanında mevcut web tabanlı uygulamaları da istemci uygulamaya dönüştürebilmektedir.  Windows uygulamalarının HTTP üzerinden dağıtımı ve kurulumu ile ilgili teknolojiler .NET Framework’ün ilk versiyonlarından itibaren mevcuttu. Bu makale, Windows uygulamalarının avantajlarını ve ClickOnce’ın arkasında yatan dağıtım ve kurulum teknolojilerini irdelemektedir.

Neden Windows Form’ları?

Internet’in ortaya çıkıp iyice yayılmaya başlamasıyla, birçok yazılım geliştiricinin ilgi odağı klasik Windows uygulamalarından, Web uygulamalarına kaydı. Web uygulamalarının yeni yüzünün getirdiğiheyecan  bir yana, aslında web uygulamalarının bir dizi çekici özelliği de bulunmaktadır:

 

-          Web tabanlı bir uygulamaya, Internet’e bağlı olduğunuz sürece, dünyanın her yerinden bağlanılabilirsiniz; bunun için istemci tarafta Windows işletim sistemine dahi ihtiyaç yoktur. Sisteminize her yerden erişilebilmesini istediğinizde saf bir web uygulaması doğru adres olacaktır.

-          Web tabanlı uygulamaları dağıtmak, kurmak, güncellemek ve kullanıma açmak çok kolaydır; tüm yapmanız gereken ilgili uygulama dosyalarını  uygun dizine kopyalamaktır. Bu işlem yapıldığı andan itibaren kullanıcılar yeni uygulama ile çalışmaya başlayabilirler. Ne DLL cehennemine düşer, ne COM güvenlik ayarları ile problem yaşar, ne de registry ayarları ile uğraşırsınız.

 

Bu makalede yukarıda değinilen ikinci konu ile ilgileneceğiz; dağıtım ve kurulum. Web tabanlı sistemlerin kullandığı HTTP protokolü, web uygulamalarına, windows uygulamalarına karşı, çok büyük avantaj kazandırmaktadır. Buna karşın web uygulamalarının aynı zamanda windows uygulamaları karşısında bir çok dezavantajı da mevcuttur:

 

-          Web tabalı uygulamaların kullanıcı arayüzleri oldukça zayıftır. Windows uygulamalarında kolayca yapılabilen, “sürükle-bırak”,  “fare sağ tuş menüsü” gibi birçok fonksiyonu, web tabanlı bir uygulamada yapmak oldukça zor ve hatta bazen imkansızdır.

-          Web uygulamalarında kullanıcı arayüzünü zenginleştirmek için türlü oyunlar mevcut ise de, bunlar genelde yazması ve hata ayıklaması oldukça güç olan bir yığın istemci taraflı script gerektirir.

-          Web uygulamaları oldukça fazla sunucu ve veri iletişimi altyapısı kaynağına ihtiyaç duyar. Bir çok işlemin ancak sunucuda yapılabilmesi ve bu nedenle uygulamanın durmadan istemci ile sunucu arasında gidip gelemesi, kullanıcıların sabrını sınayacak seviyededir.

-          Yazdırma fonksiyonları oldukça zahmetlidir; çoğunlukla ekstra ayar ve özel geliştirme gerektirir.

-          Yukarıda değinilen problemlerin bazıları web uygulamalarında, istemci tarafında çalışabilen ActiveX gibi akıllı bileşenlerlerin kullanımı ile bertaraf edilebilir; ancak bu bileşenler için de, web tabanlı olmayan sistemlerin dağıtım ve kurulum problemleri aynen geçerlidir.

 

Bu noktada akla bir soru geliyor: “Web tabanlı uygulamaların kolay dağıtım ve kurulum özelliği ile windows tabanlı uygulamaların zengin arayüz özellikleri birleştirilebilir mi?”. Bu sonun cevabı, .NET Framework’ün ilk versiyonu ile kolayca “Evet” şeklinde verilebilir. Tabii ki, sözkonusu birleşik çözümün heryerden kullanılabilir sistemler için değil de, özellikle Intranet ve Extranet üzerinde çalışacak sistemler için uygun olduğunu söylemekte fayda var.

.NET Framework ve Exe’leri “HREF’leştirme”

.NET Framework’ün 1.0 ve 1.1 versiyonları içerisinde windows form uygulamalarının HTTP üzerinden dağıtımı, kurulumu ve güncellemesi için özel seçenekler vardır. Bunun için bir EXE’yi gösteren HREF tag’ını kullanıyoruz. Internet Explorer ve .NET Framework Runtime, istek durumunda, sadece bir EXE’yi değil onun kulandığı diğer uygulama bileşenlerini de indirebilme yeteneğine sahipler. Bu tür dağıtım, kurulum ve güncelleme senaryoları “HREFleştirme” diye biliniyor.

 

Burada bahsettiğimiz tag aşağıdaki gibi bir yapıya sahip:

 

<a href="MainProject.exe">Call MainProject</a>

 

.NET Framework’de assembly’ler (EXE yada DLL) uygulamaların temel çalışma dosyalarıdır. Bir uygulamada gerçekleşebilecek değişiklikleri kolay dağıtıp, uygulamayı güncelleyebilmek için genelde uygulamalarımızı bir ana EXE’ye ve yanında bir DLL kümesi halinde geliştiririz. HREF’leştirme her ne kadar kolay bir yönetem olsa da bazı konulara dikkat etmek gerekmektedir.

 

-          .NET Framework’ün istemcilerde kurulu olması gerekmektedir.

-          İstemcide çalışan kodlar, yarı yarıya güvenli olarak çalışır. Bu bir yandan güzel bir durumdur, çünkü uygulamanın kendi sınırları içinde çalışacağını bilirsiniz. Diğer yandan, uygulama içerisinde, bir dosya açma, belirli kaynaklara erişme gibi fonksiyonlar gerekecekse, çok önemsenecek bir iş olmamakla birlikte, bazı güvenlik ayarları yapmanız gerekecektir.

-          Büyük ihtimalle uygulamanız bir EXE, destek DLL’ler ve bu DLL’lerin çeşitli kaynak dosyalarından oluşacaktır; bu durumda tüm dosyaların istemci bilgisayara indirilmesi gerekir ki, bu çoğunlukla performans ve veri iletim problemlerine neden olmaktadır.

-          Güncellemeler dosyalar halinde yapılır. Bir problem olduğunda tüm güncel dosyaların alınıp alınmadığı garantili değildir; uygulamanın bir bölümü güncellenmiş, bir bölümü ise eski versiyonda kalmış olabilir.

 

 

Updater Uygulama Bloğu

Yukarıda değinilen bazı sıkıntılara çözüm olarak, Microsoft tarafından Updater Uygulama Bloğu (Updater Application Block - UAB) geliştirilmiştir. Updater Uygulama Bloğu bir kod kütüphanesidir ve kendi geliştirdiğiniz uygulamarın içine dahil edilir. UAB uygulamanızın HTTP üzerinden güncellenmesi ile ilgili işlemlerin yönetimini gerçekleştirir. UAB’nin .NET Framework içerisindeki mevcut gömülü yapıya karşı bazı avantajları mevcuttur:

 

-          UAB uygulama ile birlikte istemci de çalışır. Bu nedenle çevirimiçi bir ortamda, uygulama çalıştığı sürece güncellemeleri kendi dinler ve böylece performans problemini büyük ölçüde ortadan kaldırır.

-          UAB, güncelemeleri bir transaction bulutu içerisinde gerçekleştirir; bu nedenle uygulamanın tüm dosyaları güncellenmeden yeni versiyon kullanıma geçmez.

-          Uygulamanın tüm dosyaları manifest içerisinde listelenir.

-          Uygulama istemci tarafta tam güvenilir şekilde çalışır; herhangi bir güvenlik ayarı yapmaya gerek kalmaz.

-          Uygulama Windows Başlangıç menüsü içerisinden çağırılabilir.

 

Yukarıdaki avantajlara karşın, UAB’nin bazı dezavantajları da mevcuttur:

 

-          UAB’yi kullanabilmek için uygulamanızı ciddi biçimde değiştirmeniz gerekebilir.

-          UAB, güncellemeleri bit’ler halinde yaptığından, Windows 98 ve NT de çalışmaz; istemcilerde Windows 2000 ve üzeri işletim sistemi gerektirir.

-          UAB kullanan uygulamalar istemcide tam güvenili biçimde çalıştığından, doğal olarak kod erişim günvenlikleri de düşer.

-          UAB kullanan uygulamalarda çıkacak güncellemeler Microsoft tarafından desteklenmemektedir.

 

UAB tam kaynak kodu ile kullanıma açık olduğundan, Microsoft tarafından resmi olarak desteklenmemektedir. Diğer yandan, yazılım geliştiriciler kendi ihtiyaçları doğrultusunda UAB içerisinde özel değişiklikler yapabilirler.

ClickOnce

Updater Uygulama Bloğu, Microsoft tarafından tutarlı ve tanımlı bir sistem geliştirilene kadar, problemlere geçici bir çözüm olarak yine Microsoft sponsorluğunda geliştirilmiş bir yapıdır. Burada bahsedilen tutarlı ve tanımlı sistem ClickOnce’dır. Temel olarak ClickOnce, UAB’nin tüm avantajlarına sahip olmakla birlikte, UAB’nun bazı dezavantajlarını ortadan kaldırmakta ve bunun üzerine ek fonksiyonlar da sunmaktadır. ClickOnce’ın en önemli özelliklerinden biri UAB’da ortadan kalkan kod erişim güvenliğini tekrar sağlamasıdır.

 

HREF’lerştirilmiş EXE’ler ile karşılaştırıldığında, ClickOnce’ın avantajları şöyle sıralanabilir:

 

-          Uygulama güncellemeleri tamamen bir transaction bulutu içerisinde gerçekleşir; uygulamanın ya tümü güncellenir; ya da hiç güncellenmez.

-          Uygulamalar çevirimdışı çalışabilmekle beraber, bu durum üzerinde kontrolleri de mevcuttur; uygulamalar çevirimiçi olup olmadıkları bazı API’ler vasıtası ile kontrol eder, ve güncelleme sürecini kendi kendilerine başlatırlar.

-          Visual Studio.NET ile oldukça başarılı entegrasyon sağlar; istemcide uygulanacak güvenlik ayarlamaları için gerekli çeşitli dosyalar burada kolayca tanımlanabilmektedir.

-          ClickOnce, beraberinde, ek uygulama bileşenlerinin ve hatta .NET Framework’ün bile indirilebilmesini sağlayan Win32 “boostraper” uygulaması ile birlikte gelir.

-          Uygulama dosyalarının istek üzerine teker teker ya da blok halinde otomatik olarak güncellenebilmesini sağlar.

-          Windows Başlangıç menüsünde kısayollar yaratabilir.

Örnek ClickOnce uygulaması

Basit bir ClickOnce uygulamasının adımları:

 

  1. Visual Studio 2005‘i başlatın.
  2. Dosya menüsünden Yeni Proje’yi tıklayın.
  3. Önce  kullanacağınız programlama dilini (C# or Visual Basic .NET) ve sonra “Windows Application” proje tipini seçin.
  4. Projenin adını  MyClickOnceApp şekllinde değiştirin ve OK tuşuna basın.
  5. Açılan Form üzerine bir Buton ekleyin ve Text özelliğini “Hakkında” şeklinde değiştirin.
  6. Eklemiş olduğunuz Buton’a çift tıklayın. Açılan kod penceresinde ilgili olay takipçisine (event handler) aşağıdaki kodu ekleyin.

 

  1. Uygulamanızı test etmek için F5 tuşuna basın.

 

Visual Studio 2005 içerisinde, tüm Windows uygulamaları için “Project” menüsü altında, uygulamanızın yayınlanması (dağıtım, kurulum ve güncelleme) ile ilgili özelliklerini ayarlayabileceğiniz “MyClickOnceceApp Properties” seçeneği bulunur:

 

 

Resim 1. Yayınlama Ayarları Ekranı

 

Publishing Location (Yayınlanacağı Yer), uygulamanın istemcilere nereden dağıtılacağını gösterir. Bu yer bir web sunucusu (HTTP) üzerinde olabileceği gibi herhangi bir network dizini de olabilir.

 

Install Mode and Settings (Kurulum Modu ve Ayarları) aşağıdaki gibi dağıtım ve kurulum detaylarını kontrol eder:

 

-          Uygulama her zaman çevirimiçi mi çalışacak, yoksa zaman zaman çevirimdışı da çalışabilecek mi?

-          Application Files  (Uygulama Dosyaları): Uygulama dosyaları nerelere kurulacak.

-          Prerequisites  (Önşartlar): Oluşturulacak kurulum programı, uygulamayı kurmadan önce Windows Installer 2.0, .NET Framework 2.0, J# Redistributable Package, SQL Server 2005 Express, Crystal Reports ve Microsoft Data Access Components 2.8 gibi uygulamanın dışında, ama uygulamanın çalışmak için ihtiyaç duyacağı diğer bileşenleri de yükleyecek mi?

 

 

 

 

Resim 2. Önşartları Ayarlama Ekranı

 

Updates (Güncellemeler): Uygulamanın ne zaman güncellemeleri kontrol etmesi gerektiği ve güncellemeleri nasıl alacağı konsundaki ayarların yapıdığı yerdir.

 

 

 

Resim 3. Güncelleme Ayarları Ekranı

 

Options (Seçenekler): Uygulama geliştirilirken kullanılan programlama dili, Başlangıç menüsü kaynak ismi, web dağıtımı için kullanılacak HTML sayfasının adresi ve yayınlama güvenlik ayarları ile ilgili yayınlama deyat ayarlarını içerir.

 

 

 

Resim 4. Yayınlama seçeneklerinin ayarlanması

 

Publish Version (Yayınlanan Versiyon) Her güncelleme yayınında, ClickOnce uygulamanın versiyonunu otomatik olarak artırır, bununla ilgili ayarlar yine buradan yapılır.

 

Publish Wizard (Yayınlama Sihirbazı) : Yayınlama Sihirbazı çeşitli yayınlama seçeneklerini ayarlamanıza olanak verir. Bu sihirbaz Visual Studio 2005’de, “Build” menüsü altındaki “Publish” seçeneği tıklanarak açılabilir. Tüm ClickOnce uygulamaları şifrelenerek imzalanmalıdır; bu bağlamda yayınlama sihirbazı sizden mevcut bir anahtar dosya ister; ya da ondan ilgili anahtarı üretmesini isteyebilirsiniz.

 

 

 

Resim 5. Yayınlama Sihirbazında uygulamanın imzalanması

 

Yayınlama sihirbazını bir kere çalıştırdıktan sonra, Pubish Now butonuna tıklayarak güncellemeleri yayınlayabilirsiniz. Örneğimizde güncellemelerin yayınlandığı sayfa aşağıdaki gibi olacaktır.

 

 

Resim 6. Uygulamanın yayınlandığı sayfa

 

Bu sayfaya girildiğinde, sayfa içerisindeki bir script uygulama kurulmadan önce herhangi bir önşart paketi yüklenmesi gerekip gerekmediğini kontrol eder. Eğer önşart olarak tanımlı bir paket varsa ve bu istemci makinede yüklü değilse, uygulama ilk kuruluşunda bu paket istemci makinede kurulur.

 

Kullanıcı Install (Kur) bağlantısına tıkladığında, kurulum sihirbazı kullanıcıdan birçok bilgi ve interaksiyon isteyebilir. Bu bağlamda ilk kurulumda aşağıdaki ekranlar açılacaktır.

 

-          Windows XP SP2 uyarıları

-          Yazılım lisans sözleşmesi

-          Yayıncının imzasının onaylanması

-          Kurulum Detayları

 

Visual Studio .NET 2005, uygulamamız için yeni bir web dizini dahilinde birçok dosya ve klasür yaratacaktır.

 

 

Resim 7. Kurulum Dosyaları

 

Bu klasörlerden, “dotnetfx” klasörü 25 MB’lık .NET Framework redistributable paketini içerir.

 

Özel bir ayar yapılmadığı takdirde, Visual Studio her kurulumda uygulamanın versiyon numarasını otomatik olarak artıracaktır. Her versiyon için ayrı bir klasör açılacak ve uygulama bileşenleri ve kaynak dosyalar bu yeni klasör içine kopyalanacaktır.

 

“.application” uzantılı dosya, kurulumun başlatılacağı “Publish.htm” adlı HTML sayfasına bir bağlantı sunmaktadır. Bu dosya bir XML dosyası olup, mevcut uygulama versiyonuna ait klasör dizinleri ile ilgili bilgileri ve yayınlayıcının imzalarını da tutar.

 

Publish.htm, uygulama yayınlama sayfasına bir bağlantı yanında, versiyon kontrolü yapan ve gerekli uyarı pencerelerini açan script’leri de içerir. Örneğin, istemcide .NET Framework kurulu değilse, yukarıda Publish.htm örneğinde görülen “Install MyClickOnceApp” bağlantısının altındaki mesaj farklı olacaktır.

 

Setup.exe bir Win32 uygulama dosyası olup, uygulamanızın ile birlikte gerekli diğer bileşenlerin de istemciye doğru sırada yüklenmesini sağlar.

 

Her uygulama klasörü, uygulama dosyaları ile birlikte bir “manifest” dosyası da bulundurur. “Manifest” dosyası aşağıdaki bilgileri tutan bir XML Dokümanıdır:

 

-          Tüm uygulama dosyalarının kimliğini belirten bilgiler. Kimlik bilgisi, dosya adı, versiyon numarası, kültür ve işlemci mimarisi bilgilerini içermektedir.

-          Uygulamanın ihtiyacı olan tüm haklar.

-          Dijital imzalar.

Uygulamayı Çalıştırmak

Uygulama indirilikten sonra, bir daha indirilmeye gerek kalmadan, web sayfasındaki bağlantıya tıklanarak ya da Başlangıç menüsündeki kısayol ile çalıştırılabilir. İki durumda da, Uygulama Güncellemeleri isimli proje seçeneklerinde belirtilen ayarlar doğrultusunda uygulamanın yeni versiyonu kontrol edilir. Yeni versiyon ihtiyaç duyulduğu anda istemci bilgisayara indirilir..

 

Bu güncelleme özelliğini kontrol edebilmek için aşağıdakileri yapınız:

 

Uyglamada görünür bir değişiklik yapın; örneğin form üzerindeki butonunyerini ve rengini değiştirin.

Uygulamayı tekrar Build edin ve yayınlayın.

İstemci tarfta uygulamayı çalıştırın ve indirme sürecini kontrol edin.

Sonuç

Yukarıda anlatılan, Windows Forms uygulamalarının dağıtımı, kurulumu ve güncellenmesi ile ilgili yöntemlerin karşılaştırmasını aşağıdaki tabloda görebiliriz.

 

Özellikler

HREF EXE

UAB

ClickOnce

Mevcut uygulamada değişiklik ihityacı

Yok

Var

Yok

Uygulama Izolasyonu (Application Isolation)

Var

Yok

Var

Microsoft kurumsal desteği

Var

Yok

Var

Sistem kaynaklarına etkisi

Düşük

Yüksek

Düşük

Kaynak kod erişim güvenliği

Var

Yok

Var

İstek Üzerine dosya güncellemesi

Var

Yok

Var

Uygulama ile ilgili dosyaların listesini tutan manifest dosyası

Yok

Var

Var

Şifrelenmiş manifest dosyası

Yok

Yok

Var

Yığın güncelleme seçeneği

Yok

Var

Var

Çevirimdışı çalışabilme özelliği

(*)

Var

Var

Transaction Bulutu içerisinde kurulum

Yok

Var

Var

Optimum Performans

Yok

Var

Var

Sadece Windows 2000 ve sonrasına destekleme

Yok

Var

(**)

Windows kabuğu entegrasyonu

Yok

Var

Var

Güncelleme süreci üzerinde sağlam kontrol

Yok

Var

Var

Çevirimdışı çalıabilmek için API ve güncelleme süreci üzerinde sağlam kontrol

Yok

Yok

Var

Seçimlik bileşenlerin otomatik kurulumu

Yok

Yok

Var

 

(*) Kullanıcı gerekli ayarları yaparsa mümkün

(**) Beta versiyonundaki bir yapı için bu konuda net bir şey söyemek güç

 

Sonuç olarak, ClickOnce uygulama dağıtımı, kurulumu ve güncellemesi için oldukça güçlü bir teknolojidir. Bu konuda, kendisinden önceki çözümlerin doğal gelişim sürecinin bir çıktısı olarak, güvenlik, performans, kullanım kolaylığı ve tutarlılığı üst düzeydedir.

 

# Mauro Sant’Anna’nın msdn.microsoft.com’da Aralık.2004’de yaınlanan konu ile ilgili makalesine dayanılarak yazılmıştır.

 

Dinçer Özturan