MSI, Tek Dosya ile Çoklu Dil Desteği

   Windows Server AppFabric’e yönetim arayüzleri geliştirdiğim açık kaynak kodlu projem AppFabric Extensions için kurulum hazırlarken, daha esnek ve kontrolün bende olması nedeniyle, Microsoft’un açık kaynak kodlu olarak yayınladığı Windows Installer Xml (WIX)’i tercih ettim. Pek çok noktada bana sunduğu esneklik nedeniyle de bunun doğru bir seçim olduğu düşünüyorum. Son sürümüyle birlikte Visual Studio içerisine oldukça iyi entegre olan WIX ile birden fazla dil’de kurulum oluşturmak gerçekten kolay. Tıpkı bir C# uygulamasında resource dosyası kullanır gibi yeni bir dil dosyası eklemek işimi gerçekten de kolaylaştırıyor.

   Kurulum oluşturmak ile ilgili tek sıkıntım (buna sıkıntı denir mi bilmem ama..) WIX projeme eklediğim her bir dil desteğinde o dile özel ayrı bir msi dosyası oluşması. Aslına bakarsanız buradaki sıkıntının kaynağı WIX değil. Windows Installer (eski adıyla Microsoft Installer) aynı anda tek bir dil ile kurulum arayüzü göstermekte, dolayısıyla da her bir dil için ayrı bir MSI dosyası oluşturuluyor. Projemin aynı zamanda x86 ve x64 sistemleri de desteklediğini ve bunlar için de ayrı kurulumlar gerektiğini düşünecek olursak ortalık msi dosyasından geçilmiyor haliyle 🙂

   İnternette bu konuyu araştırdığımda malesef ki durum pek iç açıcı görülmüyordu :\ Öneriler kurulumu ön bir programla (bootstrapper) başlatarak kullanıcının yereline göre ilgili msi dosyasını tetiklemek üzerine yoğunlaşıyordu; ama bu yöntem bana pek cazip gelmiyordu. Bana sorarsanız en şık çözüm tüm dillerin tek bir msi dosyasında toplanmasıdır her zaman.

   Konu hakkında internetin altına üstüne getirince, Microsoft tarafından dokümante edilmemiş bir Windows Installer özelliğini buldum. Bu yöntemde içerisinde ikincil dile ait farkların bulunduğu bir dönüşüm (transform) dosyası oluşturularak ana MSI dosyası içerisine gömüldüğünde (bir kaç ufak ayardan sonra) Windows Installer otomatik olarak sistem diline uygun olan kurulum arayüzünü göstermekte. Bu özelliğin dokümante edilmemiş olması nedeniyle ilerleyen sürümlerde desteklenmeyebileceğini ve riski göze alarak kullanılması gerektiğini hatırlatmalıyım.

   Bu yöntemi uygulayabilmek için WIX (kurulum dosyalarının hazırlanması için), MsiTan.exe ve Windows SDK ile birlikte gelen örnek MSI betiklere ihtiyaç duyulmakta. MsiTran.exe ve örnek betikler ISO formatında indirilebilen Windows SDK içerisinde yer almakta. İyi haber, bilgisayarınızın platformuna uygun olarak indireceğiniz Windows SDK’nın tamamını kurmanıza gerek yok.

   MsiTran.exe dosyası için cd içerisindeki Setup\WinSDKTools klasörü altında yer alan WinSDKTools_x86.msi dosyasını kurmanız yeterli olacaktır. Eğer Windows SDK’nın amd64 sürümünü indirdiyseniz kurmanız gereken dosya Setup\WinSDKTools_amd64 klasörü altındaki WinSDKTools_amd64.msi dosyası olacaktır. Kurulum sonrasında MSITran.exe dosyası %ProgramFiles%\Microsoft SDKs\Windows\v7.0\Bin klasörü altında bulunabilir. Komut satırında her yerden bu programa ulaşabilmek için bu klasör path’e eklenebileceği gibi MSITran.exe dosyası ihtiyaç duyulan yere de kopyalanabilir.

   Örnek betikler için yine cd içerisindeki Setup\WinSDKSamples klasörü altında yer alan WinSDKSamples.msi dosyasını kurmanız yeterli olacaktır. Eğer Windows SDK’nın amd64 sürümünü indirdiyseniz kurmanız gereken dosya Setup\WinSDKSamples_amd64 klasörü altındaki WinSDKSamples_amd64.msi dosyası olacaktır. Kurulum sonrasında WiSubStg.vbs ve WiLangId.vbs  dosyaları %ProgramFiles%\Microsoft SDKs\Windows\v7.0\Samples\SysMgmt\Msi\scripts klasörü altında bulunabilir. MSITran.exe dosyasında olduğu gibi bu iki betikte ihtiyaç duyulan yere kopyalanabilir.

   Bu iki kurulum işlemi ardından WIX ile yerelleştirilmiş olan kurulum dosyalarınızı oluşturmalısınız. Her bir yerelleştirme için bir msi kurulum dosyası hazırlanması ardından MSITran.exe kullanılarak aşağıda örneklediğim gibi bir dönüşüm dosyası oluşturmalısınız;

MSITran -g Kurulum.msi Kurulum-TR.msi tr.mst

  Bu örnekte, İngilizce kurulum dosyası baz alınarak (Kurulum.msi), Türkçe dosyasındaki farklar tr.mst dönüşüm dosyasına yazılmakta. Sıradaki adımda WiSubStg.vbs betiğini kullanarak bu dönüşüm dosyasını Türkçe dil koduyla (1055) ana kurulum içerisine gömmeliyiz;

WiSubStg.vbs Kurulum.msi tr.mst 1055

   Bu işlem, desteklenmesi planlanan her bir dil için yapılarak tüm dillerin kurulum içerisine gömülmesi sağlanmalıdır. Artık elimizde içerisinde Türkçe ve İngilizce dil desteği olan bir kurulum dosyası bulunmakta. Son olarak kurulum dosyasının bu iki dili desteklediğini belirtmeliyiz. Bunun için aşağıdaki örnekte belirtildiği şekilde WiLangId.vbs betiği yardımıyla Özet Bilgi Akışını (Summary Information Stream) güncellemeliyiz.

WiLangId.vbs Kurulum.msi Package 1033,1055

   Komut satırlarında kullandığım Microsoft Dil kodlarının tam listesi burada bulunabilir. Kuruluma dahil edilmek istenen ek dillerin bulunması durumunda ilgili dil’e ait LCID bu sayfadan bulunarak kullanılmalıdır.

   Yukarıda sıraladığım adımların takip edilmesi sonrasında Kurulum.msi dosyası artık Türkçe ve İngilizce dillerini barındırıyor olacaktır. Windows Installer kurulum sırasında sistemin yerel ayarları doğrultusunda ilgili kurulum dilini görüntüleyecektir.

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir