Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Anwendung starten mit eingeschalteter UAC (https://www.delphipraxis.net/152723-anwendung-starten-mit-eingeschalteter-uac.html)

musicman56 3. Jul 2010 14:23

Anwendung starten mit eingeschalteter UAC
 
Hallo,

ich habe ein Programm, das dazugehörige Module aus meiner Hauptanwendung heraus startet. Eines dieser Module ist meine eigene "Systemeinstellung" mit der Bezeichnung "xxxSetup" im EXE-Dateinamen.

Das Problem: Ist die UAC ausgeschaltet, funktioniert alles bestens. Bei eingeschalteter UAC aber passiert gar nichts. Das Problem ist ja wahrscheinlich, dass mein Hauptprogramm ohne Administrator-Rechte keine Anwendung starten kann, die aufgrund der Bezeichnung "Setup" im Dateinamen aus Sicht von Windows wohl Administrator-Rechte braucht.

Wenn der angemeldete User keine Administrator-Rechte hat, ist das Verhalten auch ok. Aber wie bekomme ich es hin, dass zumindest der UAC-Dialog angezeigt wird, wenn der angemeldete User Admin-Rechte hat? Oder kann/muss man sich die Admin-Rechte irgendwie von Windows holen?

Ich verwende "CreateProcess(...)" und denke, dass das Problem im 3.Parameter liegt, dem Pointer auf die "security attributes".

Viele Grüße
Otto

mkinzler 3. Jul 2010 14:24

AW: Anwendung starten mit eingeschalteter UAC
 
Benenne die Exe einfach um

musicman56 3. Jul 2010 14:34

AW: Anwendung starten mit eingeschalteter UAC
 
Hallo,

das wäre das naheliegendste, geht aber leider nicht, weil in dieser Exe unter Anderem Einstellungen mit meinem Datenbank-Server bewerkstelligt werden müssen. Hierzu sind Admin-Rechte erforderlich, und darum auch das "xxxSetup" im Dateinamen. Ich hab eine integrierte Benutzerverwaltung, und damit wird dann auch VOR dem EXE-Aufruf kontrolliert, ob der User Admin-Rechte hat.

Gruss Otto

mkinzler 3. Jul 2010 14:45

AW: Anwendung starten mit eingeschalteter UAC
 
Das die Meldung kommt ist aber as-designed, wenn Setup im Namen ist

musicman56 3. Jul 2010 14:55

AW: Anwendung starten mit eingeschalteter UAC
 
Hallo Markus,

mann bist du fix :-D und das kurz vor dem Spiel... die Nationalhymne läuft gerade...

Du hast vollkommen recht, das ist "as designed". Gerade deswegen ist der Dateiname ja so. Aber, das ist nicht mein Problem:

Zitat:

Aber wie bekomme ich es hin, dass zumindest der UAC-Dialog angezeigt wird, wenn der angemeldete User Admin-Rechte hat?
Mir ist schon klar, dass eine "Heraufstufung" der Benutzerrechte Probleme bereiten kann, aber das ist ja nicht der Fall: Der unter Windows angemeldete User hat natürlich Administrator-Rechte.

Gruss Otto

mkinzler 3. Jul 2010 15:32

AW: Anwendung starten mit eingeschalteter UAC
 
Bei aktivierte UAC hat keiner direkte Adminrechte, sondern nur das Recht heraufgestuft zu werden

Dezipaitor 4. Jul 2010 17:46

AW: Anwendung starten mit eingeschalteter UAC
 
CreateProcess kann keine Binärdateien ausführen, die ein Adminmanifest besitzen. Der Rückgabefehler ist dann ERROR_ELEVATION_REQUIRED afaik.
Du musst dann ShellExecute mit "runas" als Verb verwenden.

musicman56 4. Jul 2010 21:59

AW: Anwendung starten mit eingeschalteter UAC
 
Hallo,

@Dezipaitor : Vielen Dank für den Tipp!!! Mit ShellExecute und "runas" als 2.Parameter ( LPCTSTR lpOperation) funzt es einwandfrei, d.h. der UAC-Dialog wird angezeigt und alles ist gut. Und auch mit XP funktioniert es. Also alles bestens!

Kleine Zusatzfrage: In meiner Hilfe (RAD Studio 2007) ist der Parameter "runas" gar nicht beschrieben. Muss ich wohl irgendwie mal meine Hilfe updaten, aber woher nehmen? Die RAD-Studio-Aktualisierung meldet "Keine Aktualisierungen vorhanden".

Mit Delphi-2007 möchte ich schon noch etwas arbeiten, weil einige meiner Bibliotheken nicht mit Delphi-2010 kompatibel sind.

Gruss Otto


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz