
I10006 - 3.2.1064 - Windows 7 Hotfix Integration
Category: SoftService Installer - Informations
Die Integration von Hotfixen, die direkt bei dem Rollout installiert werden, ist sehr einfach.
Der SoftService Installer unterstützt Sie bei der Intergration von Patchen in das Betriebssystem. Die Patche werden schon während des Rollouts installiert. Sie benötigen dafür kein eigenes Patchmanagment oder Internetzugang bei der Installation.
Wenn Sie die Entscheidung getroffen haben, welche Patche Sie ausrollen wollen, sind es nur noch drei Schritte bis zu vollständigen Intergration.
- Herunterladen
- Entpacken
- Kopieren
Die einzelnen Schritte habe wir Ihnen im nachfolgenden detailiert beschrieben.
Wie kommen Sie an die Patche
Microsoft stellt eine komfortablen Downloadserver für alle Hotfixe bereit. Diesen erreichen Sie unter der url: http://catalog.update.microsoft.com/v7/site/Home.aspx Über die Suche ist es sehr leicht den gewünschten Fix für das Betriebssystem zu finden.
Markieren Sie erst alle Hotfixe, die Sie herunterladen wollen und starten im Anschluß den Download.
Nach dem Download finden Sie alle Hotfixe in Form von .msu Dateien in eigenen Unterverzeichnissen.
Entpacken der MSU Dateien
Bevor die Updates, die Sie von Microsoft herunter geladen haben, im Installer verwendet werden können, müssen Sie die .msu Datei entpacken.
Dies können Sie sehr einfach über die expand.exe erledigen. Die Kommandozeile dazu lautet:
expand.exe -f:* "<Vollständigen Pfad auf die .msu Datei>" "<Ziel Ordner für den Inhalt>"
Dieser Weg ist sehr umständlich. Einfacher ist die Verwendung des Scriptes, das wir für Sie erstellt haben. Bitte erstellen Sie ein Datei z.B. mit dem Namen msu_expand.vbs und dem folgenden Inhalt s.u. in einem beliebigen Verzeichnis und rufen diese einmalig per Doppelklick auf.
Danach finden Sie im Kontextmenu jeder .msu Datei die "expand" Funktion. Wenn Sie diese aufrufen, entpackt das Script die .msu Datei in ein Unterverzeichnis mit dem Namen der Datei.
msu_expand.vbs
- Code: Select all
-
Option Explicit Dim sMSUFileNamePath, sMSUFileName, sMSUFilePath Dim oShell, sTargetFolder Do Until False If WScript.Arguments.Count = 0 Then Registry_Value_Set "HKCR", _ "Microsoft.System.Update.1\shell\expand\command", _ "", _ "wscript """ & WScript.ScriptFullName & """ ""%1""", _ "REG_SZ" MsgBox "Der Kontext-Menü-Handler wurde registriert.", vbOKOnly, "SoftService Installer" Exit Do End if sMSUFileNamePath = WScript.Arguments.Item(0) sMSUFileName = Mid(sMSUFileNamePath, InStrRev(sMSUFileNamePath, "\") + 1) sMSUFilePath = Left(sMSUFileNamePath, instrrev(sMSUFileNamePath, "\") - 1) sTargetFolder = sMSUFilePath & "\" & Left(sMSUFileName, Len(sMSUFileName) - 4) if not Folder_Create(sTargetFolder) Then Exit Do Set oShell = CreateObject("WScript.Shell") oShell.run "cmd /c expand -f:* """ & sMSUFileNamePath & """ """ & sTargetFolder & """", 1, True Set oShell = Nothing Exit Do loop ' Creates nested folders. Returns "True" if folder already exists or created successfully. Private Function Folder_Create(i_FolderName) Dim oFSO Set oFSO = CreateObject("Scripting.FileSystemObject") Do Until False If oFSO.FolderExists(i_FolderName) Then Exit Do If Len(i_FolderName) = 0 Then Exit Do If Not Folder_Create(oFSO.GetParentFolderName(i_FolderName)) Then Exit Do oFSO.CreateFolder(i_FolderName) Exit do loop Folder_Create = oFSO.FolderExists(i_FolderName) Set oFSO = Nothing End Function Public Function Registry_Value_Set(ByVal i_Root, ByVal i_KeyPath, ByVal i_Value, ByVal i_Data, ByVal i_DataType) Dim objRegistry, objMethod, objInParam Do Until False Registry_Value_Set = False If Not NormalizeRegistryRoot(i_Root) Then Exit do If Not NormalizeRegistryDataType(i_DataType) Then Exit do Set objRegistry=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") Set objMethod = objRegistry.Methods_(i_DataType) Set objInParam = objMethod.inParameters.SpawnInstance_() objRegistry.CreateKey i_Root, i_KeyPath with objInParam .hDefKey = i_Root: .sSubKeyName = i_KeyPath: .sValueName = i_Value Select Case i_DataType Case "SetStringValue": .sValue = i_Data Case "SetExpandedStringValue": .sValue = i_Data Case "SetMultiStringValue": .sValue = i_Data Case "SetDWORDValue": .uValue = CLng(i_Data) End Select End with call objRegistry.ExecMethod_(i_DataType, objInParam) Registry_Value_Set = True: Exit Do Loop Set objRegistry = Nothing End function Private Function NormalizeRegistryDataType(ByRef o_DataType) Do Until False NormalizeRegistryDataType = False Select Case lcase(o_DataType) Case "binary", "reg_binary": o_DataType = "SetBinaryValue" Case "dword", "reg_dword": o_DataType = "SetDWORDValue" Case "expandedstring", "reg_expanded_sz": o_DataType = "SetExpandedStringValue" Case "multistring", "reg_multi_sz": o_DataType = "SetMultiStringValue" Case "string", "reg_sz": o_DataType = "SetStringValue" End Select NormalizeRegistryDataType = True: Exit Do loop End function Private Function NormalizeRegistryRoot(ByRef o_Root) Const HKEY_CLASSES_ROOT = &H80000000 Const HKEY_CURRENT_USER = &H80000001 const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_USERS = &H80000003 Do Until False NormalizeRegistryRoot = false Select Case o_Root Case "HKEY_CLASSES_ROOT", "HKCR", HKEY_CLASSES_ROOT: o_Root = HKEY_CLASSES_ROOT Case "HKEY_CURRENT_USER", "HKCU", HKEY_CURRENT_USER: o_Root = HKEY_CURRENT_USER Case "HKEY_LOCAL_MACHINE", "HKLM", HKEY_LOCAL_MACHINE: o_Root = HKEY_LOCAL_MACHINE Case "HKEY_USERS", "HKU", HKEY_USERS: o_Root = HKEY_USERS Case Else: Exit do End Select NormalizeRegistryRoot = True: Exit Do Loop End Function
Intergration in den Installer
Als letzen Schritt müssen Sie das so erstellte Patch Verzeichnis noch dem Installer bereit stellen.
Auch dieses ist sehr einfach. Bitte kopieren Sie das Verzeichnis einfach in den "packages" Folder des gewünschten Betriebsystemes.
Als Beispiel hier der Pfad des Windows 7 Enterprise x86 englisch:
- ..\software\nt7wEx86.eng\packages
Das war alles.
Den Rest übernimmt der Installer für Sie. Sobald die Installation gestartet wird ermittelt der Installer alle Unterverzeichnisse unterhalb von "packages" und liest die Beschreibung .xml aus. Alle Werte, die benötigt werden um den Patch in die unattended.xml auf zu nehmen sind darin enthalten.
Die unattended.xml generiert der PEClient für jede Installation individuell.
Ein Patch wird über den "servicing" Node eingebunden. Hier ein Beispiel der generierten xml :



