Ändern von Textdateien in geschützten Verzeichnissen unter Windows 7 über Kontextmenüeintrag des Lieblingseditors
Wenn man unter Windows 7 häufiger Textdateien ändern muss, die sich in irgendwelchen vom System geschützten Verzeichnissen befinden (z.B. C:\Windows\System32\Drivers\etc\hosts), wird es auf die Dauer lästig, dass man die Dateien nach dem Ändern nicht einfach speichern kann, da man normalerweise keine Schreibberechtigung in diesen Verzeichnissen hat und der gestartete Editor somit auch nicht. Man kann also nur z.B. auf dem Desktop speichern und die Datei danach händisch ins Zielverzeichnis kopieren/verschieben, weil dann die UAC-Abfrage kommt, durch deren Bestätigung man die Aktion zulassen kann. Oder den Editor mit Administratorrechten starten und die Datei(en) über das Dateimenü manuell laden und bearbeiten. Dann ist auch ein Abspeichern in geschützten Verzeichnissen möglich. Bequem wäre ein Eintrag im Kontextmenü des Explorers für alle Dateien, über den man seinen Lieblingseditor mit Administratorrechten starten kann und der dann die selektierte(n) Datei(en) lädt.
Um diese Aufgabe zu lösen braucht man folgendes:
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
Über
Über
Jetzt macht man in der rechten Fensterhälfte einen Doppelklick auf den Eintrag
Hier ist der Pfad zum Batchfile
Der übergebene Dateiname ist in der Variablen
Das Skript liest die Datei
Registerkarte Allgemein
Durch den Haken bei
Registerkarte Aktionen
Im Eingabefeld
Dadurch, dass aus CMD.EXE heraus mit
Registerkarte Bedingungen
Registerkarte Einstellungen
Nachdem die Einstellungen vorgenommen wurden, alles durch Klick auf
Gruß
Friemler
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 vonProgram 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 überStart->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 VerzeichnisC:\Program Files
und seine Unterverzeichnisse auch nur für Programme mit Administratorrechten beschreibbar sind:@echo off & setlocal
set "OtherInstance=0"
if exist "%TEMP%\TextPadParameters.txt" (
set "OtherInstance=1"
)
echo %1>>"%TEMP%\TextPadParameters.txt"
if %OtherInstance% equ 0 (
schtasks /run /tn "Meine Aufgaben\TextPadAdminMode"
)
%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 BatchfileStartTextPad.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]@echo off & setlocal
set "Files="
for /f "usebackq delims=" %%f in ("%TEMP%\TextPadParameters.txt") do call :ProcessFile "%%~f"
del "%TEMP%\TextPadParameters.txt" 2>NUL
start "" "C:\Program Files\TextPad 5\TextPad.exe" %Files%
exit /b
:ProcessFile
set "Files=%Files% %1"
exit /b
%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 BatchfileC:\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"
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 EintragTextPad 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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 157460
Url: https://administrator.de/tutorial/aendern-von-textdateien-in-geschuetzten-verzeichnissen-unter-windows-7-ueber-kontextmenueeintrag-des-157460.html
Ausgedruckt am: 21.12.2024 um 13:12 Uhr
12 Kommentare
Neuester Kommentar
Hallo Friemler!
Zuerst mal einen Glückwunsch für die Anleitung!
Mathe172
Zuerst mal einen Glückwunsch für die Anleitung!
In der Taskleiste liegt allerdings während der Laufzeit von TextPad ein minimiertes Konsolenfenster, was sich leider nicht vermeiden lässt. Wen es stört, der kann es problemlos einfach schließen.
Bei mir funktioniert es mit:start "C:\Program Files\TextPad 5\TextPad.exe" %Files%
Mathe172
Hallo Friemler,
Mathe172)
Ich vermute, Du hast den Programmpfad beim Testen nicht in Anführungszeichen gesetzt, ich schon, weil er ja auch Leerzeichen enthält. Wenn dann der Parameter für den Fenstertitel fehlt, kam es bei mir zu Fehlfunktionen.
Genau so war es (ich hab als Test einfach Notepad.exe eingegeben)WAS funktioniert ist
start "" "C:\Program Files\TextPad 5\TextPad.exe" %Files%
...Und so lernt man wieder dazu (hatte es glaube ich mal vor laaaaanger Zeit gewusst )start "" "C:\Program Files\TextPad 5\TextPad.exe" %Files%
Mathe172)
Mein "Lieblingseditor" steht als Ziel in einer Verknüpfung, die ich unter "Erweitert" als Administrator ausführen lasse und in den SendTo-Ordner gepackt habe
Die Taskmanager- und Registry-Erweiterungen kann man sich so einfach sparen.
Die Taskmanager- und Registry-Erweiterungen kann man sich so einfach sparen.
Hallo, Friemler,.
jeder verfummelt sich eben sein System so gut er kann. An Stelle von tiefgreifenden Eingriffen in Registry und ähnlichen Systemtools und seitenlangen Anleitungen bevorzuge ich einfachste Lösungen, die mir Windows 7 bietet.
Probleme beim Finden der passenden Kontextmenüeinträge hatte ich bisher noch nicht, außerdem ist mein System so schnell, dass ich keinerlei Verzögerungen beim Öffnen von Untereinträgen ertragen müsste.
Die Reihenfolge der Einträge in SendTo-Kontext könnte man sich z. B. auch durch passende Bezeichnungen etwas flexibel gestalten.
Es muss ja für dich keine Alternative sein, aber vielleicht gefällt anderen User, die hier landen, meine einfache Lösungsmöglichkeit.
Gruß
papperlapapp
jeder verfummelt sich eben sein System so gut er kann. An Stelle von tiefgreifenden Eingriffen in Registry und ähnlichen Systemtools und seitenlangen Anleitungen bevorzuge ich einfachste Lösungen, die mir Windows 7 bietet.
Probleme beim Finden der passenden Kontextmenüeinträge hatte ich bisher noch nicht, außerdem ist mein System so schnell, dass ich keinerlei Verzögerungen beim Öffnen von Untereinträgen ertragen müsste.
Die Reihenfolge der Einträge in SendTo-Kontext könnte man sich z. B. auch durch passende Bezeichnungen etwas flexibel gestalten.
Es muss ja für dich keine Alternative sein, aber vielleicht gefällt anderen User, die hier landen, meine einfache Lösungsmöglichkeit.
Gruß
papperlapapp
Hi!
Zu später Stunde gucke ich mir Deine schöne Idee an und möchte sie noch entscheidend vereinfachen.
Und zwar schon bereits nach dem Kontextmenüeintrag kann Schluss sein. Modifiziere ich den auf...
...dann läuft das ohne Tasks und sonstiges Brimborium.
2 Dinge muss man jedoch zuvor erledigen: psexec runterladen (http://technet.microsoft.com/de-de/sysinternals/bb896649) und ablegen (hier unter d:\tools\pstools) und das lokale Administratorkonto aktivieren und mit einem Kennwort versehen.
Was diese Methode ausmacht, ist die Tatsache, dass für das Konto Administrator keine UAC-Abfrage kommt (es ist das einzige Konto, für das dies gilt), es arbeitet immer mit vollen Rechten und dass psexec im Gegensatz zu runas das Kennwort übergeben kann.
Zu später Stunde gucke ich mir Deine schöne Idee an und möchte sie noch entscheidend vereinfachen.
Und zwar schon bereits nach dem Kontextmenüeintrag kann Schluss sein. Modifiziere ich den auf...
d:\tools\pstools\psexec -d -u administrator -p Kennwort notepad "%1"
2 Dinge muss man jedoch zuvor erledigen: psexec runterladen (http://technet.microsoft.com/de-de/sysinternals/bb896649) und ablegen (hier unter d:\tools\pstools) und das lokale Administratorkonto aktivieren und mit einem Kennwort versehen.
Was diese Methode ausmacht, ist die Tatsache, dass für das Konto Administrator keine UAC-Abfrage kommt (es ist das einzige Konto, für das dies gilt), es arbeitet immer mit vollen Rechten und dass psexec im Gegensatz zu runas das Kennwort übergeben kann.
Kann ich nachvollziehen.
Haken sind das nicht wirklich. Das Adminkennwort in der Registry kannst Du schützen, falls Du Angst hast, dass andere auf dem Rechner rummachen, einfach die Leserechte für den Key nur Deinem Nutzer geben (nicht etwa der Admingruppe, da nicht elevated).
Psexec betrachte ich eh als must-have, das zählt für mich zu den Bordmitteln für Admins - aber prinzipiell stimme ich Dir zu.
Dass die Einstellungen für Texteditoren nun kriegsentscheidend sind, glaube ich nicht wirklich, aber da hast Du Recht. Zur Not als Admin
anmelden und den Texteditor konfigurieren - fertig. Oder per psexec-Parameter das eigene Profil verwenden.
Mir ging es nur darum, einen Weg zu zeigen, wie man das gleiche Ziel in 1 Minute erreicht.
Haken sind das nicht wirklich. Das Adminkennwort in der Registry kannst Du schützen, falls Du Angst hast, dass andere auf dem Rechner rummachen, einfach die Leserechte für den Key nur Deinem Nutzer geben (nicht etwa der Admingruppe, da nicht elevated).
Psexec betrachte ich eh als must-have, das zählt für mich zu den Bordmitteln für Admins - aber prinzipiell stimme ich Dir zu.
Dass die Einstellungen für Texteditoren nun kriegsentscheidend sind, glaube ich nicht wirklich, aber da hast Du Recht. Zur Not als Admin
anmelden und den Texteditor konfigurieren - fertig. Oder per psexec-Parameter das eigene Profil verwenden.
Mir ging es nur darum, einen Weg zu zeigen, wie man das gleiche Ziel in 1 Minute erreicht.
Die Taskmanager- und Registry-Erweiterungen kann man sich so einfach sparen
diese Lösung gefällt mir. Ein gestarteter "Lieblingseditor" gehört zum Inventar auf meinem Desktop.Aber kann jemand mir diese Lösung
Verknüpfung, die ich unter "Erweitert" als Administrator ausführen lasse und in den SendTo-Ordner gepackt habe
etwas detaillierter erklären?