Batch per Verknüpfung mit erhöhten Rechten (z. B. als Administrator) ausführen, allerdings dabei den Pfad in !Ausführen in! nicht ignorieren.
OS = WINDOWS 7
Das Verzeichnis in "Ausführen in" wird ignoriert, wenn Batch über Verknüpfung als Administrator ausgeführt wird.
Batch-Datei über Verknüpfung mit erhöhten Rechten starten, wobei das Arbeitsverzeichnis in "Ausführen in“ nicht ignorieren.
Hallo,
wenn über eine Verknüpfung eine Batch-Datei mit erhöhten Rechten – und genauer mit der Option „Als Administrator ausführen“ - gestartet wird, dann wird das Verzeichnis in „Ausführen in“ (das unter Eigenschaften der Verknüpfung gesetzt ist) ignoriert und es wird stattdessen jeweils auf das Arbeitsverzeichnis „%windir%\System32“ zugegriffen.
Meine bisherigen Versuche:
Wenn im Batch PushD %~dp0 oder cd /d "%~dp0" hinzugefügt wird, dann verschlimmert es sich sogar: selbst mit normalen Benutzer-Rechten wird der Batch jeweils in demjenigen Arbeitsverzeichnis ausgeführt, in welchem sich die Batch-Datei befindet, aber nicht in dem gewünschten, das in „Ausführen in“ angegeben ist.
Mir runas.exe habe ich ebenso experimentiert, allerdings wird das Verzeichnis in „Ausführen in“ der Verknüpfung nicht mitberücksichtigt.
Schon längst stolpere ich über dieses Problem, sodass ich mir es nun vorgenommen habe dem einen Schluss zu ziehen.
Vielen Dank für eure Vorschläge!
Gruß
evinben
Das Verzeichnis in "Ausführen in" wird ignoriert, wenn Batch über Verknüpfung als Administrator ausgeführt wird.
Batch-Datei über Verknüpfung mit erhöhten Rechten starten, wobei das Arbeitsverzeichnis in "Ausführen in“ nicht ignorieren.
Hallo,
wenn über eine Verknüpfung eine Batch-Datei mit erhöhten Rechten – und genauer mit der Option „Als Administrator ausführen“ - gestartet wird, dann wird das Verzeichnis in „Ausführen in“ (das unter Eigenschaften der Verknüpfung gesetzt ist) ignoriert und es wird stattdessen jeweils auf das Arbeitsverzeichnis „%windir%\System32“ zugegriffen.
Meine bisherigen Versuche:
Wenn im Batch PushD %~dp0 oder cd /d "%~dp0" hinzugefügt wird, dann verschlimmert es sich sogar: selbst mit normalen Benutzer-Rechten wird der Batch jeweils in demjenigen Arbeitsverzeichnis ausgeführt, in welchem sich die Batch-Datei befindet, aber nicht in dem gewünschten, das in „Ausführen in“ angegeben ist.
Mir runas.exe habe ich ebenso experimentiert, allerdings wird das Verzeichnis in „Ausführen in“ der Verknüpfung nicht mitberücksichtigt.
Schon längst stolpere ich über dieses Problem, sodass ich mir es nun vorgenommen habe dem einen Schluss zu ziehen.
Vielen Dank für eure Vorschläge!
Gruß
evinben
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 182877
Url: https://administrator.de/contentid/182877
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo evinben!
Hinsichtlich
Als Workaround würde sich anbieten, den gewünschten Pfad einfach als Aufrufparameter mitzuliefern (einmal musst Du ihn in der Verknüpfung ohnehin eintragen) oder, falls ohnehin eine Datei oder ein Ordner als Parameter übergeben wird, deren Pfad (also zB "
Grüße
bastla
Hinsichtlich
Wenn im Batch PushD %~dp0 oder cd /d "%~dp0" hinzugefügt wird, dann verschlimmert es sich sogar: selbst mit normalen Benutzer-Rechten wird der Batch jeweils in demjenigen Arbeitsverzeichnis ausgeführt, in welchem sich die Batch-Datei befindet
In diesem Fall gilt doch "Works as designed" (da ja "%0
" die aufgerufene Batchdatei repräsentiert) ...Als Workaround würde sich anbieten, den gewünschten Pfad einfach als Aufrufparameter mitzuliefern (einmal musst Du ihn in der Verknüpfung ohnehin eintragen) oder, falls ohnehin eine Datei oder ein Ordner als Parameter übergeben wird, deren Pfad (also zB "
%~dp1
") zu verwenden ...Grüße
bastla
Hallo evinben,
darüber bin ich auch schon gestolpert. Wenn man ein bisschen im Internet stöbert, dann findet man einige Kommentare von M$, die diese Sache mit der Vermeidung von Sicherheitslücken begründen. Ist also so gewollt.
Wie bastla schon erwähnt hat, übergib den Pfad als Argument. Das kannst du direkt in die Verknüpfung implementieren. Die aufwändigere Variante (die aber auch kein besseres Ergebnis liefert) ist das Auslesen des Arbeitsverzeichnisses aus der Verknüpfung.
RunAsAdmin.vbs
Nun kannst du per Drag/Drop eine Verknüpfung zu deinem Batch auf dieses Script ziehen, das UAC promptet dich wie gewohnt an und das Arbeitsverzeichnis wird als Parameter an deinen Batch übergeben (der aber trotzdem zunächst im System32 Verzeichnis startet). Ebenso könntest du das Script natürlich auch in das SendTo Verzeichnis legen. Der leere Parameter der ShellExecute Methode würde eigentlich das Arbeitsverzeichnis beschreiben, wird aber durch das "runas" Verb ignoriert
Grüße
rubberman
darüber bin ich auch schon gestolpert. Wenn man ein bisschen im Internet stöbert, dann findet man einige Kommentare von M$, die diese Sache mit der Vermeidung von Sicherheitslücken begründen. Ist also so gewollt.
Wie bastla schon erwähnt hat, übergib den Pfad als Argument. Das kannst du direkt in die Verknüpfung implementieren. Die aufwändigere Variante (die aber auch kein besseres Ergebnis liefert) ist das Auslesen des Arbeitsverzeichnisses aus der Verknüpfung.
RunAsAdmin.vbs
If WScript.Arguments.Count = 0 Then WScript.Quit
Set objFSO = CreateObject("Scripting.FileSystemObject")
If LCase(objFSO.GetExtensionName(WScript.Arguments(0))) = "lnk" And objFSO.FileExists(WScript.Arguments(0)) Then
Set objLnk = CreateObject("WScript.Shell").CreateShortcut(WScript.Arguments(0))
arg = objFSO.GetFolder(objLnk.WorkingDirectory).ShortPath
CreateObject("Shell.Application").ShellExecute objLnk.TargetPath, arg, , "runas", objLnk.WindowStyle
Set objLnk = Nothing
End If
Set objFSO = Nothing
Grüße
rubberman
Hallo evinben!
Versuch es mal zum Thema "Parameter übergeben" so:
Erstelle den Batch in einem Pfad ohne Leerzeichen (im Beispiel "D:\Batch\DeinBatch.cmd") und verwende in der Verknüpfung als Ziel
- der Parameter sollte wie gewohnt als
Wenn Du mehrere Parameter verwendest, sollte jeder davon (auch wenn keine Leerzeichen enthalten sind) unter Anführungszeichen gesetzt werden - und falls Du Wert darauf legst, dass auch beim letzten die Anführungszeichen geschlossen werden , musst Du am Ende doppelte Anführungszeichen verwenden (nötig ist das aber nicht, da zB
Grüße
bastla
Versuch es mal zum Thema "Parameter übergeben" so:
Erstelle den Batch in einem Pfad ohne Leerzeichen (im Beispiel "D:\Batch\DeinBatch.cmd") und verwende in der Verknüpfung als Ziel
cmd /c D:\Batch\DeinBatch.cmd "D:\Ordner in dem der Batch laufen soll"
%1
auch bei Ausführung als Administrator ankommen ...Wenn Du mehrere Parameter verwendest, sollte jeder davon (auch wenn keine Leerzeichen enthalten sind) unter Anführungszeichen gesetzt werden - und falls Du Wert darauf legst, dass auch beim letzten die Anführungszeichen geschlossen werden , musst Du am Ende doppelte Anführungszeichen verwenden (nötig ist das aber nicht, da zB
%~4
jedenfalls den Parameter ohne Anführungszeichen liefert) -also etwa: cmd /c D:\Batch\DeinBatch.cmd "D:\Ordner in dem der Batch laufen soll" "Parameter 2" "Parameter3" "und noch ein vierter""
bastla
moin evinben,
wenn Dein CMD Fenster nur kurz aufblitzt lässt sich im Ziel der Verknüpfung CMD.exe /K nutzen:
somit solltest Du Die Fehler ehern sehen können.
als Schmankerl kannste immernoch im Ziel der Verknüpfung mit pushD Verzeichnis vor der Batchausführung hinein springen:
genau so verwende ichs auch in der Aufgabenplanung - ebend wegen dieser komischen Sache mit den Anführungszeichen.
Gruß Phil
wenn Dein CMD Fenster nur kurz aufblitzt lässt sich im Ziel der Verknüpfung CMD.exe /K nutzen:
C:\Windows\System32\cmd.exe /k call "D:\Eigene Einstellungen.cmd"
als Schmankerl kannste immernoch im Ziel der Verknüpfung mit pushD Verzeichnis vor der Batchausführung hinein springen:
C:\Windows\System32\cmd.exe /k pushd "D:\" && "Eigene Einstellungen.cmd"
genau so verwende ichs auch in der Aufgabenplanung - ebend wegen dieser komischen Sache mit den Anführungszeichen.
Gruß Phil