marcoborn
Goto Top

Batch mit Admin-Rechten starten

Hallo Forum,
ich schreibe gerade ein VBA-Skript, wo an einer Stelle mit Hilfe des Shell-Befehls eine Batch-Datei aufgerufen werden soll. In der Batch-Datei sind Befehle, die nur mit Admin-Rechten ausgeführt werden können.

Ich bin lokaler Admin und kann über Rechtsklick und "Als Administrator ausführen" auch die Batch problemlos starten. In VBA kann ich jedoch keinen Parameter mitliefern, mit welchen Rechten die Datei gestartet werden soll.

Ich habe eine Verknüpfung auf die Batch angelegt und dort in den Einstellungen festgelegt, dass die Batch immer mit Admin-Rechten zu starten ist. Rufe ich die Verknüpfung im Explorer auf, läuft die Batch auch sauber durch. Starte ich die Verknüpfung per VBA-Shell-Befehl wird sie jedoch wieder mit normalen Nutzerrechten gestartet.

Gibt es ggf. noch einen anderen Weg, die Batch zu laufen zu bewegen? Oder kann ich auf die Batch verzichten und dem Shell-Befehl von VBA irgendwie doch mitteilen, dass die Befehle als Admin gestartet werden sollen?

Bin für jeden Tipp dankbar.


Vielen Dank im voraus,
M. Born

Content-Key: 190501

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

Ausgedruckt am: 28.03.2024 um 09:03 Uhr

Mitglied: Pjordorf
Pjordorf 30.08.2012 um 16:38:37 Uhr
Goto Top
Hallo,

Zitat von @MarcoBorn:
Batch-Datei sind Befehle, die nur mit Admin-Rechten ausgeführt werden können.
Schlechte Idee. Da kann dann jeder das Passwort auslesen.

In VBA kann ich jedoch keinen Parameter mitliefern, mit welchen Rechten die Datei gestartet werden soll.
Warum nicht?

von VBA irgendwie doch mitteilen, dass die Befehle als Admin gestartet werden sollen?
Was hast du denn bis jetzt und wie rufst du die Batchdatei tatsächlich auf?

Gruß,
Peter
Mitglied: MarcoBorn
MarcoBorn 30.08.2012 um 16:42:48 Uhr
Goto Top
Hallo Peter,
ich rufe die Datei wie folgt in VBA auf:
Shell "C:\Users\Born\Documents\SharpDevelop Projects\tools\reg.bat - Verknüpfung.lnk"

In der Batch selbst stehen folgende Befehle:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\tlbexp.exe" "C:\Users\Born\Documents\SharpDevelop Projects\FKGen\bin\Debug\FKGen.dll" /out:"C:\Users\Born\Documents\SharpDevelop Projects\FKGen\bin\Debug\FKGen.tlb"
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\Gacutil.exe" /i "C:\Users\Born\Documents\SharpDevelop Projects\FKGen\bin\Debug\FKGen.dll"
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe" "C:\Users\Born\Documents\SharpDevelop Projects\FKGen\bin\Debug\FKGen.dll"

Wie gesagt, ich könnte die 3 Befehle auch manuell in VBA starten, wenn ich die Shell mit Admin-Rechten starten könnte. Irgendeine Idee, wo der Fehler liegt?

Gruß,
M. Born
Mitglied: Pjordorf
Pjordorf 30.08.2012 um 17:16:17 Uhr
Goto Top
Hallo,

Zitat von @MarcoBorn:
Irgendeine Idee, wo der Fehler liegt?
Kein Fehler. Ist by Design so. Du solltest dir mal runas anschauen. Dann könnte dein
Shell "runas /user:administrator /noprofile ""C:\Users\Born\Documents\SharpDevelop Projects\tools\reg.bat - Verknüpfung.lnk"""  
so aussehen. Hier wird nach einem PWD gefragt. Oder du baust dir eine setup.exe. Aufgrund des Schlüsselworts Setup.exe wird auch die UAC angetriggert hier nach erhöhten Rechten zu fragen.

Gruß,
Peter
Mitglied: MarcoBorn
MarcoBorn 31.08.2012 um 08:50:57 Uhr
Goto Top
Hallo Peter,
mit Runas hatte ich auch schon mal experimentiert, aber irgendwie die Syntax nicht richtig gehabt. Dein o.g. Code funktioniert leider auch nicht. Er fragt nach dem Passwort, dann wird die Shell geschlossen, aber die Befehle scheinen nicht durchgelaufen zu sein. Gibt es eventuell Alternativen?

Viele Grüße,
M. Born
Mitglied: Pjordorf
Pjordorf 31.08.2012 um 13:55:47 Uhr
Goto Top
Hallo,

Zitat von @MarcoBorn:
aber irgendwie die Syntax nicht richtig gehabt.
Sollte aber jetzt nicht mehr das Problem sein, oder? face-smile

Dein o.g. Code funktioniert leider auch nicht.
Doch, das tut er. Ich habe allerdings direkt eine Batchdatei getestet, keine Verknüpfungface-smile

Zuerst prüfe das du auch den richtigen Benutzer in korrekter Schreibweise verwendest. Ein runas -? hilft da. Teste es im CMD Fenster aus.
runas /user:Domäne\Benutzer /noprofile "E:\Daten\Testdaten\Testbatch.bat"
Inhalt der Testbatch.bat ist
pause

cls
set
pause

dir e: /p
pause
Du kannst natürlich auch /user:benutzer@domäne.suffix nehmen. Es bleibt dir überlassen. Wenn das korrekt funktioniert kannst du es mit einer Verknüpfung testen. Du solltest dann den Hinweis bekommen das die .lnk Datei keine gültige Win32 Anwendung ist.
runas /user:Domäne\Benutzer /noprofile "E:\Daten\Testdaten100\weiterer Ordner\Testbatch.bat.lnk"
Dieses kann gelöst werden indem du die .lnk Datei folgenderweise aufrufst
runas /user:Domäne\Benutzer /noprofile "rundll32 shell32.dll,ShellExec_RunDLL E:\Daten\Testdaten100\weiterer Ordner\Testbatch.bat.lnk"
.
Und jetzt verpacken wir das ganze für deinen VBA aufruf
Shell "runas /user:Domäne\Benutzer /noprofile ""rundll32 shell32.dll,ShellExec_RunDLL C:\Users\Born\Documents\SharpDevelop Projects\tools\reg.bat - Verknüpfung.lnk""  
Es kann allerdings sein das dir das ü wegen unterschiedliche Zeichensätze schwierigkeiten macht.

So sollte es jetzt gehen.face-smile

Gruß,
Peter
Mitglied: MarcoBorn
MarcoBorn 03.09.2012 um 15:30:17 Uhr
Goto Top
Hallo Peter,
nochmals Danke. Ich komme leider erst in ein paar Tagen dazu, hier weiter zu testen, da ein anderes Projekt mir keine Zeit lässt, hier weiter zu basteln. Ich melde mich dann noch mal, ob es geklappt hat.

Viele Grüße,
M. Born
Mitglied: MarcoBorn
MarcoBorn 13.09.2012 um 13:13:54 Uhr
Goto Top
Hallo Peter,
ich habe heute Deinen Code getestet und es funktioniert endlich.

Vielen, vielen Dank.
M. Born
Mitglied: Pjordorf
Pjordorf 13.09.2012 um 14:14:04 Uhr
Goto Top
Hallo,

Zitat von @MarcoBorn:
und es funktioniert endlich.
Machst du dann bitte noch ein Wie kann ich einen Beitrag als gelöst markieren? dran? Danke.

Gruß,
Peter
Mitglied: MarcoBorn
MarcoBorn 13.09.2012 um 19:51:25 Uhr
Goto Top
Danke für den Hinweis, hatte ich vergessen.