Yazılımcının Günlüğü | YazilimGunlugu.Com
Arama
Makale Kategorileri
Üye Girişi
Şuanki online üyeler()
Aktif üye bulunmamaktadır.


Windows Update Agent

Yazar: Kadir Sümerkent

Kategori: Microsoft Server

Eklenme Tarihi: 14.10.2007 01:35:56

Windows Update için bu işi istemci bazında otomotize eden çeşiktli ürünler / bileşenler sunmakla birlikte bu servisi sunacak uygulamalar geliştirilebilmesi için gereken tüm bileşenleri uygulama geliştiricilerin kullanımına sunmuş durumda. Bu makalede Windows Update servisini masaüstüne taşımak için

Windows Update Agent

Microsoft kendi içinde kullandığı teknolojilerin büyük kısmını uygulama geliştiricilerin kullanımınada sunuyor.. Windows Updatete bu teknolojilerden biri. Windows Update için bu işi istemci bazında otomotize eden çeşiktli ürünler / bileşenler sunmakla birlikte bu servisi sunacak uygulamalar geliştirilebilmesi için gereken tüm bileşenleri uygulama geliştiricilerin kullanımına sunmuş durumda. Bu makalede Windows Update servisini masaüstüne taşımak için kullanabileceğimiz altyapıyı tanıyor olacağız..

Makale içeriği;
     1. Windows Update Agent Nesne Modeli
     2. Kurulu WUA Sürümünün Belirlenmesi
     3. WUA APIında Erişim Kısıtlanmıl Metod ve Özellikler
     4. Güncellemelerin Aranması, Download Edilmesi ve Yüklenmesi
     5. Spesifik bir Güncellemenin Aranması, Download Edilmesi ve Kurulması


1. Windows Update Agent Nesne Modeli
Visual C++, Visual Basic ve Visual Basic kullanıyorsanız Windows Update Agentı kullanabilmek için yapmanız gereken ilk şey wuapi.dlle referans vermeniz. Eğer C veya C++ dillerinden birini kullanıyorsanız wuapi.h ve wuapi.lib dosyalarına referans vermelisiniz.

Aşağıdaki tabloda ise yukarıdaki grafikte gördüğümüz nesneleri ve açıklamalarını görebilirsiniz:

Nesne Bu nesne ile ne yapabilirsiniz
AutomaticUpdates Otomatik Güncellemeyi başlatabilir, bekletebilir, durdurabilirsiniz.
AutomaticUpdatesSettings Güncellemelerin yükleneceği tarih ve saat bilgisini belirlemek veya almak ve kullanıcıların otomatik güncellemeler ile ilgili nasıl uyarılacaklarını belirlemek için kullanabilirsiniz.
Category Güncellemenin kategorisi, adı, idsi, açıklaması, üreticisi ve ilgili ürünle ilgili bilgileri sağlar. Belirtilen kategoriye dahil güncellemeleri içeren bir kolleksiyon sağlar. Üst veya alt kategorileri içeren bir kolleksiyon sağlar.
CategoryCollection Kategorilerden oluşan bir kolleksiyon oluşturmanızı veya mevcut bir kolleksiyona erişmenizi sağlar.
DownloadResult Downloadın başarılı olup olmadığı ile ilgili bilgi verir.
InstallationResult Kurulumun veya uninstall işleminin başarısı ile ilgili bilgi verir. Aynı zamanda kurulum veya uninstall işlemi sonrasında bilgisayarı yeniden başlatmak gerekip gerekmediğini de öğrenebilirsiniz.
SearchResult Kategoriler veya güncellemeler ile ilgili bir arama işleminin başarısı ile ilgili bilgi verir.
SystemInformation Hedef bilgisayarın donanım ve yeniden başlatma gereksinimi bilgilerine erişmenizi sağlar.
Update Update, kaynak gereksinimleri, kimlik, açıklama, uninstall seçenekleri, download önceliği, boyutu ve deadline ile ilgili pek çok bilgi sağlar.
UpdateCollection Update nesnelerinden oluşan bir kolleksiyon sunar.
UpdateDownloader Belirtilen dosyaların senkron veya asenkron olarak download edilmesini başlatır.
UpdateDownloadResult Belirtilen updatein downloadı ile ilgili bilgi sağlar (başarılı/başarısız şeklinde)
UpdateException Update esnasında bir hata ile karşılaşıldığında oluşturulan exception ile ilgili bilgi sağlar.
UpdateExceptionCollection UpdateException nesnelerinden oluşan bir kolleksiyon sunar.
UpdateHistoryEntry Kurulan veya kaldırılan bir update ile ilgili, uygulama bilgilerini, tarih ve açıklama bilgilerinide içeren bilgi sağlar.
UpdateHistoryEntryCollection UpdateHistoryEntryCollection nesnelerinden oluşan bir kolleksiyon sunar.
UpdateInstallationResult Bir updatein kurulumunun başarılı veya başarısız olduğu bilgisini sağlar.
UpdateInstaller Bir updatein senkron veya asenkron kurulumunu başlatır. Kullanıcının güncellemeleri kurmasını sağlayacak bir arabirimin ve adımlarının başlatılmasını sağlar.
UpdateSearcher Sunucudaki güncellemeleri türüne, idsine veya kategorisine göre arar.
UpdateSession Bir uygulama için güncellemeleri aramak, download etmek, yüklemek ve kaldırmak için bir oturum başlatır.
WebProxy HTTP Proxy ayarlarını yapabilir veya alabilirsiniz.

Yukarıdaki tabloda ne amaçla kullanılabileceklerini kısaca belirttiğimiz nesneleri ve kullanımlarını ilerleyen bölümlerde ele alıyor olacağız ancak önce uygulamamızın çalıştığı bilgisayardaki WUA sürümünü nasıl denetleyeceğimizi görelim..

2. Kurulu WUA Sürümünün Belirlenmesi
Windows Update Agnt(WUA) yı kullanırken yapmamız gereken ilk şey mevcut sürümü öğrenmektir. Bunu Windows çalışmakta olan Windows kurulumunun \system32 dizininde yer alan WUAUEND.DLLin sürümüne bakılarak öğrenebiliriz. Eğer sürüm numarası olarak 5.4.3790.1000 veya daha üstü bir değer dönüyorsa WUA kuruludur. Eğer 5.4.3790.1000 den daha düşük bir değer dönüyorsa SUS 1.0 kurulu demektir.

SUS 1.0a WUA APIını kullanarak bir çağrı yaptığınızda HRESULT, WU_E_AU_LEGACYSERVER döner.

3. WUA APIında Erişim Kısıtlanmıl Metod ve Özellikler
WUAda yer alan bazı interface, metod ve özelliklere erişim sadece Administrator, User ve Power Users gruplarındaki kullanıcıların erişebileceği şekilde kısıtlanmıştır.

Aşağıdaki interface ve metodlara sadece Administrator, User ve Power User gruplarından birine dahil kullanıcılar erişebilir.
   - IAutomaticUpdates
   - IAutomaticUpdatesSettings
   - ISystemInformation
   - IUpdateSearcher
   - IUpdateSession

Aşağıdaki download interface ve metodlara sadece Administrators ve Power Users gruplarına dahil kullanıcılar erişebilir.
   - IUpdateDownloader
   - IUpdate::CopyFromCache

Aşağıdaki kurulum interface, metod ve özelliklerine sadece Administrators grubuna dahil kullanıcılar erişebilir.
   - IUpdateInstaller
   - IsHidden Property of IUpdate
     Not: Administrators, Users ve Power Users gruplarına dahil kullanıcılar "IsHidden Property of IUpdate" değerlerini alabilirken sadece Administrators grubuna dahil kullanıcılar bu değerleri değiştirebilir.
IUpdate::AcceptEula
IAutomaticUpdatesSettings::Save
NotificationLevel Property of IAutomaticUpdatesSettings
     Not: Administrators, Users ve Power Users gruplarına dahil kullanıcılar "NotificationLevel Property of IAutomaticUpdatesSettings" değerlerini alabilirken sadece Administrators grubuna dahil kullanıcılar bu değerleri değiştirebilir.
ScheduledInstallationDay Property of IAutomaticUpdatesSettings
     Not: Administrators, Users ve Power Users gruplarına dahil kullanıcılar "ScheduledInstallationDay Property of IAutomaticUpdatesSettings" değerlerini alabilirken sadece Administrators grubuna dahil kullanıcılar bu değerleri değiştirebilir.
ScheduledInstallationTime Property of IAutomaticUpdatesSettings

     Not: Administrators, Users ve Power Users gruplarına dahil kullanıcılar "ScheduledInstallationTime Property of IAutomaticUpdatesSettings" değerlerini alabilirken sadece Administrators grubuna dahil kullanıcılar bu değerleri değiştirebilir.

WUA çağrıyı yapanın ilgili interface, metod veya propertye erişim yetkisi olmadığını tespit ettiğinde HRESULT E_ACCESSDENIED döner.

4. Güncellemelerin Aranması, Download Edilmesi ve Yüklenmesi
Bu bölümdeki örnek scriptler size Windows Update Agentı güncellemeleri taramak, download etmek ve yüklemek için nasıl kullanabileceğinizi göstermeyi amaçlıyor.
Aşağıdaki örnek çalıştırıldığı sisteme uygun tüm güncellemeleri tarıyor ve listeliyor, download edilecek güncellemeleri içeren bir kolleksiyon oluşturuyor ve kolleksiyondaki güncellemeleri download ediyor daha sonra yüklenecek güncellemelerden oluşan bir kolleksiyon oluşturuyor ve kolleksiyondaki güncellemeleri sisteme yüklüyor. (güncelleme başlığını belirterek spesifik bir güncellemenin download edilmesini ve yüklenmesini 5. bölümde ele alıyor olacağız.

Aşağıdaki örneği çalıştırmadan önce aşağıdaki notları gözden geçirmeniz faydalı olacaktır;
   - Windows Update Agent bilgisayarınızda (kodun çalıştırılacağı bilgisayarda) kurulu olmalıdır. (Kurulu WUA versiyonunu öğrenmek ile ilgili detaylar için 2. Bölüme bakınız.)
 
   - Aşağıdaki örnek bir kullanıcı arabirimi sunmaz. Sadece yüklenen güncellemelerin bilgisayarın yeniden başlatılmasını gerektirmesi durumunda bir uyarı görüntüler.
   -
Bu örnek sadece WUA kullanarak güncelleme download edebilir. SUS 1.0 server kullanamaz.
   - Bu örnek Windows Script Host gerektirir. Windows Script Host ile ilgili detaylı bilgi için msdn veya Platform SDKnın Windows Scripting Host bölümüne bakabilirsiniz.

Aşağıdaki örneği notepade aktarıp *.vbs uzantısı ile kaydederseniz, dosyayı çift tıklayarak ya da aşağıdaki komutu komut satırına yazarak kodu çalıştırabilirsiniz.
 

cscript dosyaadi.vbs

Örnek Kod;
 

Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateupdateSearcher()
Set searchResult = _
updateSearcher.Search("IsInstalled=0 and Type=Software")

WScript.Echo "Güncellemeler aranıyor..." & vbCRLF
WScript.Echo "Bu bilgisayar için download edilebilecek güncellemeler:"

For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> " & update.Title
Next

If searchResult.Updates.Count = 0 Then
WScript.Echo "Bu bilgisayar için download edilebilecek güncelleme şu anda yok."
WScript.Quit
End If

WScript.Echo vbCRLF & "Download edilecek güncellemeler belirleniyor (kolleksiyon oluşturuluyor):"

Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")

For I = 0 to searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> adding: " & update.Title
updatesToDownload.Add(update)
Next

WScript.Echo vbCRLF & "Güncellemeler download ediliyor..."

Set downloader = updateSession.CreateUpdateDownloader()
downloader.Updates = updatesToDownload
downloader.Download()

WScript.Echo vbCRLF & "Download edilen güncellemeler:"

For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
If update.IsDownloaded Then
WScript.Echo I + 1 & "> " & update.Title
End If
Next

Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")

WScript.Echo vbCRLF & _
"Download edilen güncellemeler kurulum için hazırlanıyor (kolleksiyon oluşturuluyor):"

For I = 0 To searchResult.Updates.Count-1
set update = searchResult.Updates.Item(I)
If update.IsDownloaded = true Then
WScript.Echo I + 1 & "> adding: " & update.Title
updatesToInstall.Add(update)
End If
Next

WScript.Echo vbCRLF & "Güncellemeleri şimdi yüklemek ister misiniz? (E/H)"
strInput = WScript.StdIn.Readline
WScript.Echo

If (strInput = "H" or strInput = "h") Then
WScript.Quit
ElseIf (strInput = "E" or strInput = "e") Then
WScript.Echo "Güncellemeler kuruluyor..."
Set installer = updateSession.CreateUpdateInstaller()
installer.Updates = updatesToInstall
Set installationResult = installer.Install()

kurulum sonuçlarını bildiriyoruz
WScript.Echo "Kurulum raporu: " & _
installationResult.ResultCode
WScript.Echo "Bilgisayarın yeniden başlatılması gerekiyor: " & _
installationResult.RebootRequired & vbCRLF
WScript.Echo "Kurulan güncellemelerin listesi:"

For I = 0 to updatesToInstall.Count - 1
WScript.Echo I + 1 & "> " & _
updatesToInstall.Item(i).Title & _
": " & installationResult.GetUpdateResult(i).ResultCode
Next
End If


5. Spesifik bir Güncellemenin Aranması, Download Edilmesi ve Kurulması

Bu bölümde ise bir önceki bölümde yaptığımız örneği biraz geliştirerek spesifik bir güncellemeyi başlığına göre arayacağız. Bu örneği kendi gereksinimleriniz doğrultusunda geliştirerek ve özelleştirerek kritik bir güvenlik güncelleştirmesinin yüklenip yüklenmediğini tespit etmek için kullanabilirsiniz. Eğer güncelleme yüklenmemişse download edilmesini ve yüklenmesini sağlayabilirsiniz (kullanıcıya sorarak veya sormayarak).

Bu örnekte güncelleme, güncellemenin başlık bilgisine göre sorgulanıyor (Title Property of IUpdateHistoryEntry). Örnekte arayacağımız güncellemenin başlığı; "Update for Windows Rights Management client 1.0"

Bu örnek içinde 4. bölümde yer alan örnekte dikkat etmemiz gerektiğini söylediğim noktalara dikkat etmemiz gerekiyor;
   - Windows Update Agent bilgisayarınızda (kodun çalıştırılacağı bilgisayarda) kurulu olmalıdır. (Kurulu WUA versiyonunu öğrenmek ile ilgili detaylar için 2. Bölüme bakınız.)
 
   - Aşağıdaki örnek bir kullanıcı arabirimi sunmaz. Sadece yüklenen güncellemelerin bilgisayarın yeniden başlatılmasını gerektirmesi durumunda bir uyarı görüntüler.
   -
Bu örnek sadece WUA kullanarak güncelleme download edebilir. SUS 1.0 server kullanamaz.
   - Bu örnek Windows Script Host gerektirir. Windows Script Host ile ilgili detaylı bilgi için msdn veya Platform SDKnın Windows Scripting Host bölümüne bakabilirsiniz.

Aşağıdaki örneği notepade aktarıp *.vbs uzantısı ile kaydederseniz, dosyayı çift tıklayarak ya da aşağıdaki komutu komut satırına yazarak kodu çalıştırabilirsiniz.
 

cscript dosyaadi.vbs

Örnek Kod;

Set updateSession = CreateObject("Microsoft.Update.Session")

aranacak güncellemenin başlığını alalım
WScript.Echo "Aramak istediğiniz güncellemenin başlığı: " & _
"(örnek: Update for Windows Rights Management client 1.0)"
updateTitle = WScript.StdIn.Readline

WScript.Echo vbCRLF & "Aranan güncelleme: " & updateTitle & "..."

Set updateSearcher = updateSession.CreateupdateSearcher()

Tüm yazılım güncelleştirmelerini tara, hem yüklenmiş olanları, hem yüklenmemiş olanları
Set searchResult = _
updateSearcher.Search("Type=Software")

Set updateToInstall = CreateObject("Microsoft.Update.UpdateColl")

updateIsApplicable = False

Dönen sonuçlar arasında belirtilen başlığı ara
For i = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(i)
If UCase(update.Title) = UCase(updateTitle) Then
güncelleme bulundu
önceden kurulu olup olmadığını denetle
If update.IsInstalled = False Then
WScript.Echo vbCRLF & _
"Sonuç: Güncelleme bulundu, henüz yüklenmemiş."
updateIsApplicable = True
updateToInstall.Add(update)
Else
Güncelleme önceden yüklenmiş, kullanıcıyı uyar ve çık
WScript.Echo vbCRLF & _
"Sonuç: Güncelleme bulundu ancak bu güncelleme daha önceden yüklenmiş."
updateIsApplicable = True
WScript.Quit
End If
End If
Next

If updateIsApplicable = False Then
WScript.Echo "Sonuç: Güncelleme bu bilgisayara yüklenemez."
WScript.Quit
End If


WScript.Echo vbCRLF & "Şimdi yüklemek istiyor musunuz? (E/H)"
stdInput = WScript.StdIn.Readline

If (strInput = "H" or strInput = "h") Then
WScript.Quit
ElseIf (stdInput = "E" OR stdInput = "E") Then
Download update
Set downloader = updateSession.CreateUpdateDownloader()
downloader.Updates = updateToInstall
WScript.Echo vbCRLF & "Download ediliyor..."
Set downloadResult = downloader.Download()
WScript.Echo "Download sonucu: " & downloadResult.ResultCode

güncellemeyi kur
Set installer = updateSession.CreateUpdateInstaller()
WScript.Echo vbCRLF & "Kuruyor..."
installer.Updates = updateToInstall
Set installationResult = installer.Install()

kurulum sonucunu görüntüle
WScript.Echo "Kurulum raporu: " & _
installationResult.ResultCode
WScript.Echo "Bilgisayarın yeniden başlatılması gerekiyor: " & _
installationResult.RebootRequired

End If
 

Bu makalede WindowsUpdatein programlanması ve özelleştirilmesi için kullanabileceğiniz Windows Update Agent arabiriminin nasıl kullanılabileceği ile ilgili temel bilgileri aktarmaya çalıştık. Özellikle tek tek kontrol edilemeyecek kadar çok istemcinin bulunduğu networklerde istemcilerimizin gerekli güvenlik güncellemelerini (yeri geldiğinde farkında olmadan) kurmalarını sağlamak için yardımcı olabilir.

Windows Update Agent ile ilgili çok fazla public dokuman yok ne yazık ki. MSDN, Technet veya Platform SDKdan bu makaleyede kaynak olan Windows Update Agent referansına erişebilirsiniz.

Tema
Anket
Visual Studio 2010 Beta 2'yi denediniz mi?


En Çok Okunan Makaleler
En Son Eklenen Makaleler
Soru Merkezinde Bekleyenler
Ana Sayfa | Hakkımızda | Editörler | Yazarlar | RSS RSS | İletişim
Yazılım Günlüğü 2007-2009 © Tüm Hakları Saklıdır.