home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2005 January / PCWELT_1_2005.ISO / pcwsoft / pcwUnlockFile.z.exe / pcwUnlockFile.vbs
Encoding:
Text File  |  2004-11-10  |  5.1 KB  |  87 lines

  1. Set MyShell = Wscript.CreateObject("Wscript.Shell")
  2. Set MyFiles = WScript.CreateObject("Scripting.FileSystemObject")
  3. Set c = MyShell.Environment("PROCESS")
  4.     windir = c("windir")
  5. Set arg=wscript.arguments
  6. On Error Resume Next
  7.  
  8. 'Dateipfad/Namen aus dem Argument des Scripts auslesen
  9. Dateipfad = arg(0)
  10. Dateiname = Myfiles.GetFileName(DateiPfad)
  11.  
  12. '▄berprⁿfen, ob bereits eine Datei in dieser Session entsperrt wurde
  13. check = MyShell.Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\pcwUnlockFile")
  14.  
  15. If check = 1 Then
  16.     'Wenn ja, werden die Einstellungen in der Registry zurⁿckgesetzt
  17.     'Auslesen der Backup-Werte
  18.     Backup1 = MyShell.Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourceBak")
  19.     Backup2 = MyShell.Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServiceBak")
  20.     'Quellpfad der Setup-Dateien zurⁿcksetzen
  21.     MyShell.Regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourcePath", Backup1, "REG_SZ" 
  22.     'Quellpfad der Service-Pack-Dateien zurⁿcksetzen
  23.     MyShell.Regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServicePackSourcePath", Backup2, "REG_SZ"
  24.     'L÷schen der Backup-EintrΣge
  25.     MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourceBak" 
  26.     MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServiceBak"
  27.     'L÷schen des Check-Wertes
  28.     MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\pcwUnlockFile"
  29.     'L÷schen des Autostart-Eintrags
  30.     MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\pcwUnlockFile"
  31. Else    
  32.     'Wenn nein, wird die Datei entsperrt
  33.     '▄berprⁿfen, ob die Datei existiert
  34.     If Dateipfad = "" Then
  35.         Fehler = MsgBox("Bitte geben Sie die zu entsperrende Datei inklusive Pfad als Argument beim Aufruf des Scripts an.", 48, "Fehler")
  36.         wscript.quit
  37.     ElseIf not (myfiles.FileExists(Dateipfad)) Then
  38.         Fehler = MsgBox("Die angegebene Datei kann nicht gefunden werden.", 48, "Fehler")
  39.         wscript.quit
  40.     End If
  41.     'Auslesen der Quell-Pfade
  42.     Quelle1 = MyShell.Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourcePath")
  43.     Quelle2 = MyShell.Regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServicePackSourcePath")
  44.     'Backup des Quellpfades der Setup-Dateien anlegen
  45.     MyShell.Regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourceBak", Quelle1, "REG_SZ"
  46.     'Backup des Quellpfades der Service-Pack-Dateien anlegen 
  47.     MyShell.Regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServiceBak", Quelle2, "REG_SZ"
  48.     'L÷schen der Quell-EintrΣge
  49.     MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SourcePath" 
  50.     MyShell.Regdelete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ServicePackSourcePath"
  51.     'Anlegen des Check-Wertes
  52.     MyShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\pcwUnlockFile", 1, "REG_SZ"
  53.     'Pfad des Dllcache-Ordners ermitteln
  54.     Dllcache = MyShell.Regread("Hkey_Local_Machine\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SFCDllCacheDir")
  55.     'Falls leer den Standard-Ordner wΣhlen
  56.     If Dllcache = "" Then Dllcache = windir & "\System32\dllcache"
  57.     If Mid(Dllcache, Len(Dllcache), 1) = "\" Then Dllcache = Mid(Dllcache, 1, Len(Dllcache)-1)
  58.     'L÷schen der Backup-Datei aus dem Dllcache-Ordner
  59.     loeschen = MyShell.Run("cmd /c del " & Chr(34) & dllcache & "\" & Dateiname & Chr(34), 0, True)
  60.     'Umbenennen der geschⁿtzten Datei
  61.     umbenennen = MyShell.Run("cmd /c ren " & Chr(34) & Dateipfad & Chr(34) & " " & Dateiname & "_Backup", 0, True)
  62.     Err.Clear
  63.     'Versuch, die geschⁿtzte Datei zum Schreiben zu ÷ffnen (damit der SFC-Dialog aufpoppt)
  64.     Set Schreibvers = MyFiles.OpenTextFile(Dateipfad & "_Backup", 8, False)
  65.     Schreibvers.Close
  66.     Err.Clear
  67.     'Warten bis Windows sich beschwert
  68.     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...")
  69.     'Zurⁿckkopieren der umgenannten Datei in den ursprⁿnglichen Dateinamen
  70.     kopieren = Myfiles.CopyFile(Dateipfad & "_Backup", Dateipfad, True)
  71.     'Autorun-Eintrag setzen
  72.     MyShell.Regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\pcwUnlockFile", wscript.ScriptFullName, "REG_SZ"
  73.     'Warten falls die Datei erneut im Dllcache erscheint, maximal 10 Sekunden
  74.     n=0
  75.     Do
  76.         if (myfiles.FileExists(dllcache & "\" & Dateiname)) Then Exit Do
  77.         Wscript.Sleep(1000)
  78.         n=n+1
  79.     loop until n=10
  80.     'Schlussdialog
  81.     Fertig = MsgBox("Jetzt kann die Datei " & Dateipfad & " bearbeitet werden." & chr(13) & "Danach starten Sie den Rechner neu.", 64, "Fertig")
  82.     'Gegebenenfalls erneutes L÷schen der Backup-Datei aus dem Dllcache
  83.     loeschen = MyShell.Run("cmd /c del " & Chr(34) & dllcache & "\" & Dateiname & Chr(34), 0, True)
  84.     MyShell.Run("Explorer /select, " & DateiPfad)
  85. End if
  86.         
  87.