Group Policy Kullanarak Exe Uygulama Kurulması
Kullanıcılara kurmak istediğimiz uygulamaları msi paketlerini kullanarak Group Policy vasıtasıyla dağıtabiliyoruz. Ancak birden fazla işletim sistemi ya da x86, x64 gibi platformlar için uygun olan msi paketlerini bir arada barındıran kurulum uygulamasını kullanıcılara dağıtmak istediğimizde bu durum sıkıntı yaratacaktır. Bu durumda işletim sistemi ve platforma uygun msi paketinin belirlenmesi işlemini kurulum için hazırlanmış olan exe paketine bırakmak çok daha uygun olacaktır. Bu durumda ise Group Policy konsolunu msi paketini dağıtmak yerine kullanıcıların bilgisayarlarında exe dosyasını çalıştırmak için kullanmamız gerekecek. Bu makalemde konuyu daha net anlatabilmek amacıyla group policy kullanarak clientlara Microsoft. Net 4 Client Profile kurulumunun yapılmasını anlatmaya çalışacağım.
Microsoft. Net 4 Client Profile kurulum dosyası içerisinde Windows XP, Windows Vista gibi işletim sistemleri ve x86 ya da x64 platformları için msi paketleri bulunmakta böylece tüm işletim sistemi ve platformlar desteklenmektedir. Ancak Group Policy üzerinden exe dosyalarını msi paketleri gibi dağıtamamamız sebebiyle bu işlemi ufak bir kod kullanarak yapacağız.
NOT: Microsoft. Net 4 Client Profile kurulum dosyasını
adresinden indirebilirsiniz.
NOT: Microsoft. Net 4 Client Profile kurulum dosyası ağ üzerinde tüm bilgisayarların erişebileceği ve kullanıcıların tamamının okuma yetkisinin olduğu bir paylaşım üzerinde bulundurulmalıdır.
Yazmış olduğum visual basic script kodunu notepad gibi bir metin editörüne kopyalayıp dosya_adi.vbs şeklinde bilgisayarımıza kayıt edelim. Uygulamanın kurulumunu kullanıcılar oturum açtıklarında gerçekleşecek şekilde ayarlamak istediğimizden group policy nin Logon özelliğini kullanacağız. Kurulum için kullanılacak olan kodun çalışma mantığını aşağıda maddeler halinde bulabilirsiniz.
1. Öncelikle ilgili bilgisayar ismini %COMPUTERNAME% değişkenini kullanarak belirliyor ve bunu strComputer değişkenine eşitliyoruz.
2. Uygulamanın kurulu olup olmadığını belirlemek için başlangıçta “d” değişkenini oluşturup değerini sıfır olarak atıyoruz.
3. Bilgisayarlara kurulan uygulamaların kayıtları registry içerisinde ki HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVerisonUninstall anahtarının altında tutulmaktadır. Bu bölümü kullanacağımız için bu değeri strKeyPath değişkenine eşitliyoruz.
4. HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVerisonUninstall altında bulunan SubKey ler içerisinde bizim Display Name değerini içeren SubKey lerin karakter sayısı 37 değerinden büyük olanlar olduğundan “If Len(subkey)>37 Then” komutunu kullanarak gerekli karşılaştırmayı yapıyoruz.
5. Öncelikle ValueTypes değerinin boş olup olmadığını kontrol ediyoruz. Çünkü bazı anahtarların altı boş olabilmekte. Eğer boş ise herhangi bir işlem yaptırmadan bir sonra ki anahtara geçmesini sağlıyoruz. Eğer boş değil ise devam ediyoruz.
6. Subkey ler içerisinde bulunan değerler (Display Name, Display Version, Install Date gibi) arasında Display Name değerini arıyoruz
7. Display Name değeri var ise içeriğinin Microsoft. NET Framework 4 Client Profile olup olmadığını kontrol ediyoruz.
8. Eğer doğru ise uygulamanın sistemde kurulu olduğunu tespit etmiş oluyoruz. Buna bağlı olarak “d” değişkeninin değerini 1 yaparak kodun sonlanmasını sağlıyoruz.
9. Eğer doğru değil ise bir sonra ki Subkey e geçerek arama devam ediyoruz.
10. Eğer Microsoft .NET Framework 4 Client Profile değeri hiçbir subkey içerisinde bulunamazsa uygulamanın sistemde kurulu olmadığını tespit etmiş oluyoruz. Buna bağlı olarak “d” değişkenini 0 yaparak kodun ağ üzerinde paylaşımda bulunan exe dosyasını çalıştırmasını ve kurulumu kullanıcıların görebileceği ancak iptal edemeyeceği (passive) şekilde başlatmasını sağlıyoruz.
11. d değişkeninin 1 ya da 0 olması sayesinde eğer uygulama sistemde kurulu durumda ise kullanıcının her oturum açışında kurulumun çalıştırılmamasını sağlamış oluyoruz.
Yukarıda açıklanan adımları içeren visual basic script (vbs) kodu aşağıda ki gibidir;
Option Explicit
Dim objReg, objShell,objDNT4 Dim strKeyPath, strComputer Dim ValueNames, ValueTypes, Value Dim arrSubkeys, subkey, i, d Const HKEY_LOCAL_MACHINE = &H80000002 Const REG_SZ=1 const ForAppending = 8 d=0 Set objShell = WScript.CreateObject( “WScript.Shell” ) strComputer = objShell.ExpandEnvironmentStrings( “%COMPUTERNAME%” ) Set objReg=GetObject(“winmgmts:{impersonationLevel=impersonate}!\” & strComputer & “rootdefault:StdRegProv“) strKeyPath = “SOFTWAREMicrosoftWindowsCurrentVersionUninstall“ objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys For Each subkey In arrSubKeys If Len(subkey)>37 Then objReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath & “” & subkey, ValueNames, ValueTypes If IsNull(ValueTypes) Then Else For i=0 To UBound(ValueTypes) Select Case ValueTypes(i) Case REG_SZ If ValueNames(i)=”DisplayName” Then objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath & “” & subkey, ValueNames(i), Value If Value=”Microsoft .NET Framework 4 Client Profile” Then d=1 Exit For End If End If End Select Next End If End If If d=1 Then Exit For Next If d=0 Then Set objShell = Wscript.CreateObject(“Wscript.Shell“) objDNT4=”/passive” & ” ” & “/promptrestart“ objShell.Run (“\hakancansrvsharesYeni_KurulumdotNetFx40_Client_x86_x64.exe” & ” ” & objDNT4) End If WScript.Quit |
İlgili kodu dosya_adi.vbs olarak kayıt ettikten sonra Group Policy Management konsolu üzerinde kullanıcılarımızın bulunduğu organizational unit üzerine gelerek sağ tıklayalım ve Create and link a GPO here… seçeneğine tıklayalım. Yeni oluşturduğumuz policy mize bir isim verelim (Örneğin Dotnet4 Install) ve sağ tıkladığımızda açılan menüden Edit seçeneğine tıklayalım. Group Policy de User Configuration–> Windows Settings–> Scripts bölümüne gelelim. Ekran görüntüsü aşağıda ki gibidir.
Sağ tarafta bulunan Logon seçeneğine çift tıklayarak açalım. Açılan Logon Properties ekranında Alt bölümde bulunan Show Files butonuna tıklayalım ve açılan pencereye kayıt ettiğimiz dosya_adi.vbs dosyasını yapıştırdıktan sonra pencereyi kapatalım. Ekran görüntüsü aşağıda ki gibidir.
Ardından Logon Properties ekranında ki Add butonuna tıklayalım. Açılan Add Script penceresinde Browse butonuna tıklayalım ve karşımıza gelen pencereden az önce kopyaladığımız vbs dosyasını seçerek Open butonuna tıklayalım. Ardından OK butonuna tıklayarak Add Script penceresini kapatalım. Tekrar OK diyerek Logon Properties ekranınıda kapatalım. Ekran görüntüleri aşağıda ki gibidir.
Böylece group policy mizi hazırlamış olduk. Artık kullanıcılar oturumlarını açtıklarında eğer .Net4 Client Profile bilgisayarlarında yüklü değil ise kurulum yapılacaktır ve kurulum sırasında kullanıcıların Cancel diyerek işlemi iptal etmeleri de mümkün olmayacaktır. Ekran görüntüsü aşağıda ki gibidir.
Tabi taskmanager kullanılarak ilgili kurulum öldürülebilir. Bunun önüne geçmek amacıyla kurulum erkanlarının kullanıcılara gösterilmeyebilir. Bunu sağlayabilmek için objDNT4=”/passive” & ” ” & “/promptrestart“ bölümünde /passive yerine /q parametresi kullanılabilir.
NOT: Kurulumun yapılabilmesi için kullanıcıların bilgisayarlarında local admin yetkisine sahip olmaları gerekmektedir.
NOT: Kurulumun yapılabilmesi için ilgili exe dosyasının ağ üzerinde tüm kullanıcılar tarafından okunabilen bir paylaşım içerisinde bulunmalıdır.
NOT: Bazı Windows XP işletim sistemi çalışan bilgisayarlarda kurulum sırasında gerekli olan Windows Imaging Component bileşeni yüklü olmadığından hata aldım ve kurulum yapılamadı. Windows Imaging Component bileşenini
adresinden indirp kurduğunuzda Microsoft .Net 4 Client Profile yukarıda anlatılan yöntem ile sorunsuz şekilde kurulacaktır.
Bu makalemde sizlere bir exe uygulamasını Group Policy vasıtasıyla kullanıcılara nasıl kurabileceğimizi .Net 4 Client Profile kurulumunu örnekleyerek anlatmaya çalıştım.
Faydalı olması dileğimle…