home *** CD-ROM | disk | FTP | other *** search
Wrap
Set MyShell = Wscript.CreateObject("Wscript.Shell") Set MyFiles = WScript.CreateObject("Scripting.FileSystemObject") Set c = MyShell.Environment("PROCESS") windir = c("windir") Set arg=wscript.arguments On Error Resume Next 'Dateipfad/Namen aus dem Argument des Scripts auslesen Dateipfad = arg(0) Dateiname = Myfiles.GetFileName(DateiPfad) '▄berprⁿfen, ob bereits eine Datei in dieser Session entsperrt wurde check = MyShell.Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\pcwUnlockFile") If check = 1 Then 'Wenn ja, werden die Einstellungen in der Registry zurⁿckgesetzt 'Auslesen der Backup-Werte Backup1 = MyShell.Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourceBak") Backup2 = MyShell.Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServiceBak") 'Quellpfad der Setup-Dateien zurⁿcksetzen MyShell.Regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourcePath", Backup1, "REG_SZ" 'Quellpfad der Service-Pack-Dateien zurⁿcksetzen MyShell.Regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServicePackSourcePath", Backup2, "REG_SZ" 'L÷schen der Backup-EintrΣge MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourceBak" MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServiceBak" 'L÷schen des Check-Wertes MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\pcwUnlockFile" 'L÷schen des Autostart-Eintrags MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\pcwUnlockFile" Else 'Wenn nein, wird die Datei entsperrt '▄berprⁿfen, ob die Datei existiert If Dateipfad = "" Then Fehler = MsgBox("Bitte geben Sie die zu entsperrende Datei inklusive Pfad als Argument beim Aufruf des Scripts an.", 48, "Fehler") wscript.quit ElseIf not (myfiles.FileExists(Dateipfad)) Then Fehler = MsgBox("Die angegebene Datei kann nicht gefunden werden.", 48, "Fehler") wscript.quit End If 'Auslesen der Quell-Pfade Quelle1 = MyShell.Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourcePath") Quelle2 = MyShell.Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServicePackSourcePath") 'Backup des Quellpfades der Setup-Dateien anlegen MyShell.Regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourceBak", Quelle1, "REG_SZ" 'Backup des Quellpfades der Service-Pack-Dateien anlegen MyShell.Regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServiceBak", Quelle2, "REG_SZ" 'L÷schen der Quell-EintrΣge MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourcePath" MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServicePackSourcePath" 'Anlegen des Check-Wertes MyShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\pcwUnlockFile", 1, "REG_SZ" 'Pfad des Dllcache-Ordners ermitteln Dllcache = MyShell.Regread("Hkey_Local_Machine\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SFCDllCacheDir") 'Falls leer den Standard-Ordner wΣhlen If Dllcache = "" Then Dllcache = windir & "\System32\dllcache" If Mid(Dllcache, Len(Dllcache), 1) = "\" Then Dllcache = Mid(Dllcache, 1, Len(Dllcache)-1) 'L÷schen der Backup-Datei aus dem Dllcache-Ordner loeschen = MyShell.Run("cmd /c del " & Chr(34) & dllcache & "\" & Dateiname & Chr(34), 0, True) 'Umbenennen der geschⁿtzten Datei umbenennen = MyShell.Run("cmd /c ren " & Chr(34) & Dateipfad & Chr(34) & " " & Dateiname & "_Backup", 0, True) Err.Clear 'Versuch, die geschⁿtzte Datei zum Schreiben zu ÷ffnen (damit der SFC-Dialog aufpoppt) Set Schreibvers = MyFiles.OpenTextFile(Dateipfad & "_Backup", 8, False) Schreibvers.Close Err.Clear 'Warten bis Windows sich beschwert ZwStopp = MsgBox("Warten Sie, bis Windows Sie auffordert, die Setup-CD einzulegen." & chr(13) & "Klicken Sie dann auf 'A B B R E C H E N'." & chr(13) & "Im nachfolgenden Dialog auf 'J A' ." & chr(13) & "Erscheint kein Dialog innerhalb der nΣchsten Minute, klicken Sie hier auf OK.", 64, "Bitte warten...") 'Zurⁿckkopieren der umgenannten Datei in den ursprⁿnglichen Dateinamen kopieren = Myfiles.CopyFile(Dateipfad & "_Backup", Dateipfad, True) 'Autorun-Eintrag setzen MyShell.Regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\pcwUnlockFile", wscript.ScriptFullName, "REG_SZ" 'Warten falls die Datei erneut im Dllcache erscheint, maximal 10 Sekunden n=0 Do if (myfiles.FileExists(dllcache & "\" & Dateiname)) Then Exit Do Wscript.Sleep(1000) n=n+1 loop until n=10 'Schlussdialog Fertig = MsgBox("Jetzt kann die Datei " & Dateipfad & " bearbeitet werden." & chr(13) & "Danach starten Sie den Rechner neu.", 64, "Fertig") 'Gegebenenfalls erneutes L÷schen der Backup-Datei aus dem Dllcache loeschen = MyShell.Run("cmd /c del " & Chr(34) & dllcache & "\" & Dateiname & Chr(34), 0, True) MyShell.Run("Explorer /select, " & DateiPfad) End if