Entwickler-Ecke

Windows API - Batchskript mit Admin Rechten ausführen


redbird - Do 12.03.09 00:28
Titel: Batchskript mit Admin Rechten ausführen
Hi,

ich möchte ein Batchskript mit Admin Rechten ausführen.

Unter Vista funktioniert folgender Code problemlos, d.h. UAC fordert entsprechend Adminrechte:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var  ShEx :TShellExecuteInfo;

  FillChar(ShEx,SizeOf(ShEx),0);
  ShEx.cbSize:= SizeOf(ShEx);
  ShEx.Wnd:=Application.Handle;
  ShEx.fMask := SEE_MASK_FLAG_DDEWAIT OR SEE_MASK_FLAG_NO_UI;
  ShEx.lpVerb := 'runas';
  ShEx.lpFile:=PChar(extractFilePath(Application.ExeName)+'\test.bat');

  ShEx.nShow:=SW_SHOWNORMAL;
    if NOT ShellExecuteEx(@ShEx) then
      RaiseLastOSError;


Unter Xp bekomme ich allerdings die Meldung "System Error: 1155. Der angegebenen Datei ist keine Anwendung zugeordnet".
Wie kann ich selbiges ändern?


Danke für eure Antworten,
redbird


jaenicke - Do 12.03.09 00:51

Die Angabe runas sollte unter XP eigentlich den Benutzerdialog anzeigen. Ich muss deinen Code mal kurz testen, ob das geht.
// EDIT:
Ok, also mit Batchdateien klappt das unter XP nicht, mit Exedateien schon. Du könntest ja nach Betriebssystem unterscheiden. Allerdings wäre dann unter XP das Problem nicht gelöst, wenn da die Rechte fehlen.
Irgendwie müsste das ja auch mit .bat Dateien gehen. :gruebel:
// EDIT2:
Ich sehe schon: In der Registry ist unter shell bei Batchdateien kein Handler für runas eingetragen. Bei Exes schon, da ist der Befehl dafür "%1" %*, wobei %1 der Dateiname ist. Hmm.

Was mir auffällt:
Du benutzt ExtractFilePath. Das hängt aber bereits ein \ an, du hast also ein doppeltes drin.
ExtractFileDir gibt den Pfad ohne zurück.


bis11 - Do 12.03.09 09:01

Hi,

probiere mal den Sourcecode [http://www.michael-puff.de/Developer/Delphi/Code-Snippets/Impersonate.shtml] von Luckie aus. Habe den schon unter Windows XP und VISTA für Softwareverteilung eingesetzt.


redbird - Mi 18.03.09 00:39

Hi,

danke für eure Antworten.

Wie es sich herausgestellt hat funktioniert meine oben erwähnte Methode nicht zuverlässig, daher werde ich wohl anstelle einer Batchdatei eine zweite Exe verwenden. Der kann dann auch gleich per Manifest entsprechende Rechte gegeben werden.

MfG
redbird


FinnO - Mo 23.03.09 18:52

Nur so als Frage:

Könnte man nicht der eigentlichen exe Admin-Rechte geben und dann die Batch-Datei ausführen? dann müsste die doch automatisch Admin-Rechte haben oder?