Kafayı yiyecektim arkadaşlar. Müşteri "hocam şu masaüstü uygulamamızın kurulumunu da yapsak mı?" dediğinde, "tabi canım, Inno Setup var, iki saatte hallederiz" diye düşünmüştüm. Meğerse kendi kendime açtığım cehennemin kapısıymış. "Sihirbaz" dedikleri şey, her "İleri" butonunda ruhundan bir parça koparıyor insanın.
Olay şu: Basit kurulum için Inno Setup'ın GUI'si yetiyor. Ama sen "kurulum öncesi şu servisi durduralım, şu registry anahtarını kontrol edelim, kullanıcıdan özel bir ayar alalım" dersen, işte o noktada karşına Pascal Script çıkıveriyor. Delphi'yi andıran, 90'lardan fırlamış gibi duran bir script dili. StackOverflow'da bile çözüm bulmak için arkeolojik kazı yapman gerekiyor.
Mesela, kurulum tamamlandığında bir servisi başlatmak istedin. Scriptini yazdın, her şey güzel. Sonra kullanıcı "Geri" butonuna basıp yeniden "İleri" yapınca, aynı servisi tekrar tekrar başlatmaya çalışıp hata veriyor. Şaka gibi ama 3 saatimi aldı bu saçma bug'ı çözmek.
Kod:
if not IsServiceRunning('BenimServisim') then
StartService('BenimServisim');
Bir kere, InitializeSetup ve InitializeWizard fonksiyonlarının farkını anlamadan bu işe girmeyin. Biri setup başlarken, diğeri sihirbaz penceresi oluşturulurken çalışıyor. Yanlış yere yazdığın kod, ya hiç çalışmıyor ya da seni deli ediyor.
Diğer bir konu da Check ve NextButtonClick event'leri. Kullanıcı "İleri" dediğinde önce bir koşulu kontrol ettirmek istiyorsun. Eğer koşul sağlanmazsa, sihirbazın ilerlemesini engelleyip hata mesajı göstermen lazım. Bunu doğru yapmak için küçük bir ritüel bilmek gerekiyor:
Kod:
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
if CurPageID = wpSelectDir then
begin
if not DirExists(SelectedDir) then
begin
MsgBox('Geçerli bir dizin seçin!', mbError, MB_OK);
Result := False;
end;
end;
end;
Sonuçta, özelleştirilmiş, profesyonel görünümlü bir kurulum sihirbazın oluyor. Kullanıcı deneyimi kesinlikle "setup.exe'yi çalıştır ve next'e bas"ın çok ötesine geçiyor. Ama bedeli ağır. Pascal Script öğrenmek, beklediğimden çok daha derin ve bazen sinir bozucu bir süreçti.
Siz de benzer bir kurulum kabusu yaşadınız mı? Ya da Inno Setup yerine NSIS veya WiX gibi alternatiflerde daha mı az acı çekilir? Fikirlerinizi bekliyorum, belki bir sonraki projede canımı daha az yakabilirim!