friemler
Goto Top

Ä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:

  • 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! face-wink

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.


back-to-topHere 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).


back-to-topDer 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""

3668f5a8c73784906435c21868fa1eb4

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.


back-to-topDas 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:
@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"  
)
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.


back-to-topDas 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]
@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
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.


back-to-topDie 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.

3c9a003e1d63d51445f5d393f5f8b517
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.


8eafa4220c7d863b97797b9715bcb08e
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. face-smile


0864766eb37ec11a24f7d76d8e6128ea
Registerkarte Bedingungen


ae76bb814fd0a6cb62e2caadebd1409e
Registerkarte Einstellungen


Nachdem die Einstellungen vorgenommen wurden, alles durch Klick auf OK speichern. Das Hauptfenster der Aufgabenplanung sollte dann folgendes zeigen:

6d08477316212391255400fb93d92ed5



back-to-topTest

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. face-smile


Gruß
Friemler

Content-Key: 157460

Url: https://administrator.de/contentid/157460

Ausgedruckt am: 29.03.2024 um 14:03 Uhr

Mitglied: mathe172
mathe172 23.12.2010 um 19:45:11 Uhr
Goto Top
Hallo Friemler!

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%  
face-wink

Mathe172
Mitglied: Friemler
Friemler 23.12.2010 um 22:51:24 Uhr
Goto Top
Hallo Mathe172,

danke für den Hinweis, manchmal sieht man den Wald vor lauter Bäumen nicht! Obwohl es GENAU so, wie Du es beschreibst, bei mir NICHT funktioniert. WAS funktioniert ist
start "" "C:\Program Files\TextPad 5\TextPad.exe" %Files%
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.

Gruß
Friemler
Mitglied: mathe172
mathe172 23.12.2010 um 23:31:11 Uhr
Goto Top
Hallo Friemler,

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 face-smile (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 face-wink)

Mathe172)
Mitglied: 96394
96394 26.12.2010 um 19:32:27 Uhr
Goto Top
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 face-smile

Die Taskmanager- und Registry-Erweiterungen kann man sich so einfach sparen.
Mitglied: Friemler
Friemler 26.12.2010 um 23:49:10 Uhr
Goto Top
Hallo papperlapapp,

Zitat von @96394:
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 face-smile

... und deshalb musst Du im Kontextmenü ziemlich weit nach unten, um "Senden an ..." zu erreichen, noch kurz warten, bis sich dieses Untermenü öffnet und dort nochmal bis zum Icon Deines Editors navigieren. Wenn Du die Maus ungenau führst, schließt sich das Untermenü dummerweise auch noch. Für mich keine Alternative.

Gruß
Friemler
Mitglied: 96394
96394 27.12.2010 um 00:22:48 Uhr
Goto Top
Hallo, Friemler,.

jeder verfummelt sich eben sein System so gut er kann. face-smile 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. face-wink
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
Mitglied: Friemler
Friemler 27.12.2010 um 10:48:44 Uhr
Goto Top
Moin papperlapapp,

Zitat von @96394:
... außerdem ist mein System so schnell, dass ich keinerlei Verzögerungen beim Öffnen von Untereinträgen ertragen müsste.

Die Verzögerung ist mit Absicht in den Explorer eingebaut, lässt sich aber auch irgendwo abschalten.

Gruß
Friemler
Mitglied: 96533
96533 07.01.2011 um 00:23:22 Uhr
Goto Top
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...
d:\tools\pstools\psexec -d -u administrator -p Kennwort notepad "%1"  
...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.
Mitglied: Friemler
Friemler 07.01.2011 um 11:22:03 Uhr
Goto Top
Hallo Lassie,

sicherlich, unter Verwendung externer Tools lassen sich viele Dinge einfacher lösen. Mein Bestreben ist es jedoch, solche Problemchen mit Bordmitteln zu lösen. Da das in diesem Fall möglich ist, habe ich diesen Weg gewählt. Eine UAC-Abfrage erscheint dabei übrigens auch nicht.

Deine Methode hat auch zwei kleine Haken:
  • Das Programm, was mit PsExec gestartet wird, läuft unter dem Benutzerkontext des Kontos Administrator. Da Programme unter Windows 7 ihre Einstellungen in Dateien ablegen, die unter dem Benutzerprofil abgespeichert werden, werden diese Einstellungen bei der PsExec-Methode nicht gefunden und deshalb die Default-Einstellungen verwendet. In diesem Fall geht es zwar nur um einen Texteditor, aber Notepad, der kaum relevante Einstellungsmöglichkeiten besitzt, verwende ich nur im Not(e)fall face-wink .
  • Das Administratorpasswort wird in der Registry unter dem Kontextmenüeintrag im Klartext gespeichert.

Was Du und sinngemäß der (abgemeldete) User 96394 (ehemaliger Nickname papperlapapp) als "Brimborium" bezeichnen, ist für mich ein Weg, um ein tieferes Verständnis für Windows zu bekommen.

Gruß
Friemler
Mitglied: 96533
96533 07.01.2011 um 11:34:16 Uhr
Goto Top
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.
Mitglied: itebob
itebob 12.06.2016 um 20:21:10 Uhr
Goto Top
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?
Mitglied: Friemler
Friemler 12.06.2016 aktualisiert um 21:53:29 Uhr
Goto Top
Hallo itebob,

Zitat von @itebob:

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?

Da der User, der die obige Aussage getroffen hat, sich mittlerweile abgemeldet hat, beantworte ich Dir die Frage.

  1. Verknüpfung auf den Texteditor erstellen und einen passenden Namen vergeben.
  2. Rechtsklick auf die Verknüpfung -> Eigenschaften -> Erweitert -> Haken bei "Als Administrator ausführen".
  3. Danach kannst Du die Verknüpfung nach C:\Users\<Benutzername>\AppData\Roaming\Microsoft\Windows\SendTo kopieren. Dadurch entsteht im Menü "Senden an" ein Eintrag mit dem unter 1. vergebenen Namen.

Gruß
Friemler


[EDIT]
Falls man Notepad++ als "Lieblingseditor" verwendet, ist diese Anleitung inzwischen obsolet. Für diesen Editor gibt es das Plugin SaveAsAdmin, das es ermöglicht, Notepad++ ganz normal zu starten und beim Speichern von Dateien bei Bedarf automatisch erhöhte Rechte anzufordern (UAC-Prompt erscheint).
[/EDIT]