Um diese Aufgabe zu lösen braucht man folgendes:
- Einen Eintrag im Kontextmenü, der
- ein Batchfile startet, das
- eine Aufgabe in der Aufgabenplanung startet, die
- ein Batchfile mit höchsten Rechten startet, das wiederum den Editor startet.
Don't Panic!
Der Umweg über zwei Batchfiles ist nötig, weil man einer Aufgabe keine Parameter übergeben kann. Das erste Batchfile schreibt deshalb den/die Namen der zu öffnenden Datei(en) in eine temporäre Datei, die vom zweiten Batchfile ausgelesen wird.
Dabei kommt aber noch ein Stolperstein ins Spiel. Wenn man im Explorer mehrere Dateien selektiert und dann über den Kontextmenüeintrag das erste Batchfile aufruft, übergibt der Explorer nicht etwa eine Liste aller Dateien, sondern führt den Aufruf für jede Datei einzeln durch. Ergebnis wäre, das für jede ausgewählte Datei eine Instanz des Editors läuft. Sehr unkomfortabel im Handling. Aus diesem Grund müssen noch besondere Maßnahmen ergriffen werden, auf die ich bei der Vorstellung des entsprechenden Batchfiles eingehen werde.
Die Aufgabe in der Aufgabenplanung dient dazu, das gewünschte Programm (hier ein Skript) mit Administratorrechten zu starten. Alle von diesem Skript gestarteten Programme erhalten dann ebenfalls Administratorrechte. Auch dabei gibt es etwas zu beachten. Startet man in der Aufgabe einfach CMD.EXE mit dem Parameter
/C "PfadUndNameDesZweitenBatchfiles.cmd", wird das Editorfenster im Hintergrund geöffnet. Auch lästig. Aber auch das lässt sich umgehen.
Here we go!
Da ich den Editor TextPad V5 verwende, gebe ich überall Pfade zu diesem Programm an. Wer einen anderen Editor verwendet, kann das hier beschriebene Verfahren auch verwenden, muss aber entsprechende Anpassungen bei den Pfaden vornehmen. Bei einem 64Bit-Windows ist der Pfad zum Programme-Verzeichnis von
Program Files auf
Program Files (x86) zu ändern (außer, der verwendete Editor liegt auch in einer 64Bit-Version vor).
Der Kontextmenüeintrag
Fangen wir mit dem Kontextmenüeintrag an. Dazu öffnet man über
Start->Ausführen...->regedit den Registryeditor und navigiert zum Schlüssel
HKEY_CLASSES_ROOT\*\shell. In diesem Schlüssel kann man Kontextmenüeinträge für alle Dateitypen erstellen, deshalb der Stern (
*) im Schlüsselpfad.
Über
Rechtsklick auf shell->Neu->Schlüssel erstellt man einen neuen Unterschlüssel und gibt ihm z.B. den Namen
TextPad im AdminMode. Dieser Text taucht später im Kontextmenü auf.
Über
Rechtsklick auf den neu erstellten Schlüssel->Neu->Schlüssel legt man unter diesem Schlüssel einen Unterschlüssel an, dem man den Namen
Command gibt.
Dieser Name muss so lauten!
Jetzt macht man in der rechten Fensterhälfte einen Doppelklick auf den Eintrag
Standard und trägt in der erscheinenden Dialogbox im Eingabefeld
Wert folgendes ein:
C:\Windows\System32\cmd.exe /c ""C:\Program Files\TextPad 5\TextPadAdminMode.cmd" "%1""
Hier ist der Pfad zum Batchfile
TextPadAdminMode.cmd angegeben, das ich im Installationsverzeichis von TextPad abgelegt habe. Wer einen anderen Editor verwendet oder das Batchfile an einem anderen Ort speichern möchte, muss das entsprechend anpassen. Damit ist dieser Teil abgeschlossen.
Das erste Batchfile
Jetzt erstellt man am besten auf dem Desktop folgendes Batchfile, da das Verzeichnis
C:\Program Files und seine Unterverzeichnisse auch nur für Programme mit Administratorrechten beschreibbar sind:
05.
if exist "%TEMP%\TextPadParameters.txt" (
09.
echo %1>>"%TEMP%\TextPadParameters.txt"
11.
if %OtherInstance% equ 0 (
12.
schtasks /run /tn "Meine Aufgaben\TextPadAdminMode"
Der übergebene Dateiname ist in der Variablen
%1 gespeichert. Er wird in jedem Fall an die Datei
%TEMP%\TextPadParameters.txt angehängt. Der Befehl
SCHTASKS wird aber nur ausgeführt, wenn die Datei
%TEMP%\TextPadParameters.txt beim Start des Skripts noch nicht vorhanden war. Damit wird der oben erwähnte Stolperstein umgangen, dass nämlich der Explorer bei mehreren ausgewählten Dateien das Batchfile für jede Datei separat aufruft. Es wird also erreicht, dass
SCHTASKS nur für die erste Datei ausgeführt wird, bei allen anderen landet lediglich deren Pfad und Name in der temporären Datei
%TEMP%\TextPadParameters.txt.
SCHTASKS startet die Aufgabe, die hinter dem Parameter
/TN angegeben wird. Wie man sieht, liegt diese in einem "Verzeichnis"
Meine Aufgaben, doch dazu später mehr. Nachdem man das erstellte Batchfile nach
C:\Program Files\TextPad 5\TextPadAdminMode.cmd kopiert und dabei die Abfrage der UAC bejaht hat, ist dieser Teil abgeschlossen.
Das zweite Batchfile
Weil wir gerade dabei sind, erstellen wir jetzt noch das Batchfile
StartTextPad.cmd, zunächst ebenfalls auf dem Desktop, um es nach Fertigstellung händisch nach
C:\Program Files\TextPad 5\StartTextPad.cmd zu kopieren. [Edit] 23.12.2010: Skript auf Anregung von bastla (und Mathe172) etwas geändert [/Edit]
05.
for /f "usebackq delims=" %%f in ("%TEMP%\TextPadParameters.txt") do call :ProcessFile "%%~f"
07.
del "%TEMP%\TextPadParameters.txt" 2>NUL
08.
start "" "C:\Program Files\TextPad 5\TextPad.exe" %Files%
Das Skript liest die Datei
%TEMP%\TextPadParameters.txt Zeile für Zeile ein und setzt aus dem Inhalt der Zeilen die Variable
Files zusammen, die somit die Pfade und Namen aller zu öffnenden Dateien enthält, jeweils in Anführungszeichen eingeschlossen und durch ein Leerzeichen voneinander getrennt. Der Inhalt dieser Variablen wird an TextPad als Parameterliste übergeben. Vorher wird die Datei
%TEMP%\TextPadParameters.txt allerdings noch gelöscht, sonst funktioniert der Aufruf des Editors im AdminMode das nächste Mal nicht mehr.
Die Aufgabe in der Aufgabenplanung
So, jetzt fehlt noch die Aufgabe in der Aufgabenplanung, um das Batchfile
C:\Program Files\TextPad 5\StartTextPad.cmd zu starten. Dazu zunächst mal über das Startmenü die Aufgabenplanung öffnen. Dort macht man im linken Panel des Fensters einen Rechtsklick auf
Aufgabenplanungsbibliothek und wählt aus dem Kontextmenü
Neuer Ordner.... In der Dialogbox gibt man dem Ordner den Namen
Meine Aufgaben. Dann einen Rechtsklick auf den neu erstellten Ordner machen und
Aufgabe erstellen... aus dem Kontextmenü wählen. Welche Einstellungen auf den Registerkarten der nun erscheinenden Dialogbox zu machen sind, zeigen die folgenden Bilder.
Registerkarte Allgemein
Durch den Haken bei
Mit höchsten Privilegien ausführen wird das Programm, was durch die Aufgabe gestartet wird, mit Administratorrechten, aber unter dem Benutzerkonto des weiter oben eingetragenen Benutzers ausgeführt.
Registerkarte Aktionen
Im Eingabefeld
Argumente hinzufügen (optional): gibt man folgendes ein:
/c start /min cmd /c "C:\Program Files\TextPad 5\StartTextPad.cmd"
Dadurch, dass aus CMD.EXE heraus mit
START /MIN CMD /C ... nochmals eine Instanz von CMD.EXE gestartet wird, die das Batchfile
C:\Program Files\TextPad 5\StartTextPad.cmd ausführt, liegt das Editorfenster zum Schluss im Vordergrund.
Registerkarte Bedingungen
Registerkarte Einstellungen
Nachdem die Einstellungen vorgenommen wurden, alles durch Klick auf
OK speichern. Das Hauptfenster der Aufgabenplanung sollte dann folgendes zeigen:
Test
Wenn jetzt alles geklappt hat, sollte im Explorer im Kontextmenü jeder Datei der Eintrag
TextPad im AdminMode auftauchen. Wenn eine oder mehrere Dateien ausgewählt wurden, werden diese durch einen Klick auf den Eintrag im Editor geöffnet. Wie man bei Dateien wie der
C:\Windows\System32\Drivers\etc\hosts sehen kann, lassen sie sich nun auch mit dem Editor abspeichern.
Gruß
Friemler