schalterschorsch
Goto Top

Admin-Rechte werden trotz uac-prompt nicht an script weitergereicht

Ich habe eine Toolbox gebaut, welche auch einen SFC starten soll.
Klickt man direkt auf "als admin ausführen" bei dem script, funktioniert das.
Andere Programme lassen sich sauber mit Adminrechten ausführen.
Ich weiß nicht mehr weiter, wie ich das noch geradeziehen könnte.

Hallo,

ich hoffe, ihr könnt mir helfen.
Ich habe eine kleine Toolbox in hta gebaut, die buttons sind in visual basic gebaut, der uac-prompt klappt auch.
Leider klappt es bei einem Script nicht, die Admin-Rechte auf das Script zu übergeben.

Der vb-Aufruf über die HTA sieht so aus:

Dim UAC

Sub SFC
Set UAC = CreateObject("Shell.Application")
UAC.ShellExecute ".\src\sfc.bat", , , "runas"
End Sub


Der Prompt kommt, windows sagt mir dann aber, man müsse admin sein, um sfc zu starten.
Ursprünglich habe ich vor dem sfc noch Abfragen geplant gehabt, damit man das Laufwerk eingeben kann.
Dann könnte man einen Zweig bauen, der einen offline-sfc erlaubt, sofern das angegebene Laufwerk nicht c: ist.

Bei einer anderen Exe, die zwingend admin-Rechte braucht, funktioniert der Aufruf.
Ich habe auch versucht die getadmin.vbs ins script selbst einzubauen und die "elevation" dadurch herbeizuführen.
Sie steht an oberster Zeile, der Prompt kommt-ändert aber leider an der SFC-Fehlermeldung nichts.

Fehlermeldung: "windows resource protection could not start the repair service"
Diese vbs sieht so aus:

Set UAC = CreateObject("Shell.Application")
UAC.ShellExecute "C:\temp\SFC.bat", "", "", "runas", 1

In der Sfc.bat steht drin:

sfc /scannow
pause

Kann es an dem Startparamenter /scannow liegen ?

Die hta kann ich noch nachreichen, wenn die jemand zum testen haben will.
Denke aber, dass es als eigentständige vbs genauso funktioniert.

Danke schonmal face-smile

Content-ID: 194928

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

Ausgedruckt am: 22.11.2024 um 08:11 Uhr

rubberman
rubberman 26.11.2012 um 22:44:06 Uhr
Goto Top
Hallo Schalterschorsch.

Wenn in deinem Batch der Befehl sfc steht und die Batchdatei selbst sfc heißt, was glaubst du was dann aufgerufen wird?

Grüße
rubberman
Schalterschorsch
Schalterschorsch 27.11.2012 um 08:21:55 Uhr
Goto Top
Hallo rubberman,

ich hatte die Batch vor dem post anders benannt, es ist also leider nicht so, dass der Dateiname der Bat zu irgendwelchen Befehls-Fehlern kommt.
rubberman
rubberman 27.11.2012 um 18:26:06 Uhr
Goto Top
Hallo Schalterschorsch.

Dann teste mal so:
CreateObject("Shell.Application").ShellExecute "cmd.exe", "/c ""C:\temp\filename.bat""", "", "runas", 1

Grüße
rubberman
Schalterschorsch
Schalterschorsch 27.11.2012 um 21:59:33 Uhr
Goto Top
Hallo,

danke für deinen zweiten Tipp, rubberman. Den Aufruf so zu ändern, dass cmd als Parameter den PFad zum script zu fressen
kriegt, hilft leider auch nichts, war aber ein guter Ansatz.

ich bin einen Schritt weiter. Der Aufruf von Skripten als Admin funktioniert. Man braucht hierzu einen Helfer namens "elevate"- dieser als Aufruf startet das uac-Popup. Dumm ist nun nur noch, dass man keine Parameter weitergeben kann.
Er nimmt also "sfc /scannow" nicht an, wenn ich es über eine batch weiterreiche. Das windows-powertoy für elevate funktioniert gänzlich nicht, das andere tool hier nur, wenn ich damit eine weitere Batch starte, die "sfc /scannow" drin stehen hat.
Das elevate-tool als exe gibts hier: http://www.winability.com/elevate/

Letzendlich ist nun noch die Frage: warum ist es ein Unterschied, ob ich in einer selbst aufgerufener shell elevate.cmd aufrufe und in dieser sfc /scannow eingebe.
Ich würde lieber das MS-powertoy nutzen. Das ist mir irgendwie lieber als das third-party-tool.
Das Tool gibts hier:
http://social.technet.microsoft.com/Forums/en/w7itprosecurity/thread/bc ...

Vielleicht müsste ich sowas wie start /wait einbauen, weil die Batch zu früh weiter geht.

bei der elevate.cmd poppt kurz ein sfc-Fenster hoch, welches sich sofort wieder schließt (nicht nur minimiert)
Code:
start /wait elevate.cmd sfc /scannow

Immerhin geht es erstmal "irgendwie"
rubberman
rubberman 27.11.2012 um 22:35:08 Uhr
Goto Top
Zitat von @Schalterschorsch:
hilft leider auch nichts, war aber ein guter Ansatz

Hallo Schalterschorsch.

Hatte bei mir auf Anhieb funktioniert.

Ich weiß immer noch nicht genau wie du den Pfad übergibst. Bedenke, dass der per ShellExecute aufgerufene cmd.exe Prozess in %SystemRoot%\System32 ausgeführt wird. Mit relativen Pfadangaben wirst du also im Zweifelsfall Probleme bekommen. Wie sieht das bei dir in der Realität aus?

Grüße
rubberman
Schalterschorsch
Schalterschorsch 27.11.2012 um 22:56:40 Uhr
Goto Top
Hi,

ich habe deine Lösung eingebunden gehabt, in der bat steht sfc /scannow drin
Der UAC-Prompt kommt, wird aber nicht richtig umgesetzt, da die Batch nicht als Admin läuft.
Sie läuft lt.Fenstertitel in C:\windows\syswow64\

Der Inhalt sagt aber was anderes:
C:\Windows\system32>sfc /scannow

Windows Resource Protection could not start the repair service.
rubberman
rubberman 27.11.2012 um 23:20:08 Uhr
Goto Top
Hi,

damit habe ich nun ein Problem: 0 Erfahrung auf Win x64 face-sad
Ich weiß nur so viel, dass es Abhängigkeiten vom aufrufenden Programm gibt, ob die 32 oder 64 Bit Versionen herangezogen werden.
Also ist deine Mithilfe gefragt. Wo liegt die sfc.exe? Rufe die sfc.exe mal mit vollem Pfad aus deiner Batchdatei auf. Falls sie sowohl in syswow64, als auch in system32 existiert, teste beides.

Grüße
rubberman
Schalterschorsch
Schalterschorsch 27.11.2012 um 23:30:44 Uhr
Goto Top
Hi,
Es gibt die sfc.exe in beiden Ordnern.
Könnte also gut sein, dass genau die falsche von beiden auferufen wird.
Was mir schon seltsam vorkam war, dass es nicht die klassische "you must be an administrator to run this"-Meldung kommt.
Ich werde morgen weitertesten und mal den Pfad nach system32/syswow fest einbauen und schauen was passiert.
Schalterschorsch
Schalterschorsch 05.12.2012 um 15:35:55 Uhr
Goto Top
Ich habe es erst einmal mit der elevate64 gelöst.
Da auch andere Lösungen ähnlich aussehen, werde ich meine Toolbox irgendwann in VB portieren- dort ist das Chaos wegen der Aufrufe nicht so eine Bastelei.
Man könnte die HTA versuchen als 64 bit Applikation zu starten- dafür muss dann aber auch wieder ein anderes script her ...