Hallo!
Ich fummel mir grad eine Lösung zusammen, um automatisiert die boot.ini von Windows zu verändern. Um genau zu sein, es geht darum, das ein normaler boot-ini Eintrag ohne Kernel-Option vorzufinden ist, hier in meiner Umgebung jedoch diverse PC's ein anderes Boot-Logo haben und ergo der Eintrag /kernel=XYZ bei den Optionen in der boot.ini steht.
Diese Einträge möchte ich gerne automatisiert per Script entfernen. Dabei ist neben der Änderung an sich wichtig, das der User eine endgültige Änderung erst bestätigt.
Ich habe bislang folgende Lösung zusammengeschrieben:
Die Original-Boot.ini wird kopiert. Die Kopie wir eingelesen und die entsprechenden Stellen, also die Optionen, mit einem Leerzeichen ersetzt. Danach wird der User gefragt, ob er die Änderung bestätigt (er sieht dann in einer Msgbox beide Varianten, die Alte und die Neue). Bestätigt er, wir die alte boot.ini gelöscht und die neue boot.ini an diese Stelle kopiert. Sagt er nein, wird die Kopie wieder entfernt und es passiert nichts weiter.
Mein Problem: FileDelete() möchte nicht, das ich die boot.ini lösche. Ich ändere schon im Programm die Zugriffsrechte auf die Datei (kein Schreibschutz, nicht versteckt) aber trotzdem hängt sich das Programm einfach auf.
Hier der Code:
[autoit]
Filecopy("c:\boot.ini","c:\Programme\boot.ini")
FileSetAttrib("c:\Programme\boot.ini", "-RH", 1)
$find = "/kernel=singkrnl.exe" ;Danach wird gesucht
$find2 = "/kernel=dualkrnl.exe" ;Danach auch
$replace = "" ;und damit ersetzt
$filename = "c:\programme\boot.ini" ;Der Pfad und der Name der Datei
$filename2 = "c:\boot.ini"
$ersetzt = StringReplace(FileRead($filename), $find, $replace) ;Datei wird gelesen und der gesuchte String ersetzt
$extend1 = @extended
msgbox(1,"1",$extend1)
FileDelete($filename) ;Alte Datei wird geleert bzw. gelöscht
FileWrite($filename, $ersetzt) ;Neue Datei wird geschrieben
$ersetzt2 = StringReplace(FileRead($filename), $find2, $replace) ;Datei wird gelesen und der gesuchte String ersetzt
$extend2 = @extended
FileDelete($filename) ;Alte Datei wird geleert bzw. gelöscht
FileWrite($filename, $ersetzt2) ;Neue Datei wird geschrieben
if ($extend1 = 0) AND ($extend2 = 0) Then
msgbox(4096,"Abbruch","Kann Boot.ini nicht finden" & Chr(13) & Chr(13) & "Der Vorgang wird beendet.")
else
$old = FileRead("c:\boot.ini")
$new = FileRead("c:\Programme\boot.ini")
$value = msgbox(4,"Boot.ini ersetzen","Alte Datei: " & Chr(13) & Chr(13) & $old & Chr(13) & Chr(13) & "Neue Datei: " & Chr(13) & Chr(13) & $new & Chr(13) & "Möchten sie die Datei ändern?")
[/autoit][autoit][/autoit][autoit]if $value = 6 Then
FileClose($filename2)
FileSetAttrib($filename2,"-RH",1)
FileCopy($filename,"c:\boot.ini",1)
FileSetAttrib($filename2, "+RH",1)
FileDelete($filename)
msgbox(4096,"Bearbeitung","Datei wird geändert...",3)
else
FileDelete($filename)
msgbox(4096,"Bearbeitung","Vorgang wird abgebrochen...",3)
endif
endif
Über Sauberkeit etc kann man streiten, ich möchte eigentlich primär mein Problem gelöst wissen^^ Verfeinerungen am Code, Beschönigungen etc. nehme ich grundsätzlich erst vor, wenn die Funktionalität vollständig gegeben ist.
Jemand eine Idee?
MfG