Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Benutzerkontensteuerung für Admin Rechte startet nur im Hintergrund (https://www.delphipraxis.net/167245-benutzerkontensteuerung-fuer-admin-rechte-startet-nur-im-hintergrund.html)

Viktorii 20. Mär 2012 08:03

Benutzerkontensteuerung für Admin Rechte startet nur im Hintergrund
 
Moin.

Ich starte aus meiner Anwendung heraus bedingt eine weitere von mir geschriebene Kommandozeilenanwendung. Anwendung 1 soll auf die Beendigung der Kommandozeilenanwendung warten. Das habe ich so gelöst:

Delphi-Quellcode:
  FillChar(ExecuteInfo, SizeOf(ExecuteInfo), 0);
  ExecuteInfo.cbSize := SizeOf(TShellExecuteInfo);

  with ExecuteInfo do
  begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    wnd := Application.Handle;
    lpFile := PChar('App.exe');
    // lpParameters := PChar('-t');
    lpDirectory := PWideChar(ExtractFilePath(Application.ExeName) + '..\App\');
    nShow := SW_SHOWMAXIMIZED;
  end;

  if ShellExecuteEx(@ExecuteInfo) then
  begin
    WaitForSingleObject(ExecuteInfo.hProcess, INFINITE);

    GetExitCodeProcess(ExecuteInfo.hProcess, ExitCode);
...
...
Die Kommandozeilenanwendung brauch Adminrechte und fordert diese an. Das Maifest sieht so aus:

Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="X86"
    name="Private.Unknown.MySampleApp"
    type="Win32"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
</assembly>
Prinzipiell funktioniert das auch alles. Nur kommt der Benutzerkontensteuerungsdialog, der die Adminrechte anfordert nicht automatisch in den Vordergrund. Er blinkt nur unten in der Taskleiste vor sich hin und man muss in mit einem Klick in den Vordergrund holen.

Wie kann ich erreichen das er automatisch im Vordergrund erscheint wenn ich meine Kommandozeilenanwendung aus meiner anderen Anwendung heraus starte?

jaenicke 20. Mär 2012 08:12

AW: Benutzerkontensteuerung für Admin Rechte startet nur im Hintergrund
 
Application.Handle ist nun einmal im Hintergrund und kein sichtbares Fenster. Wenn die UAC sichtbar aufpoppen soll, musst du auch ein Handle eines sichtbaren Fensters angeben, dem dieses Popup zugeordnet werden soll (auch von der Position her).

Viktorii 20. Mär 2012 08:21

AW: Benutzerkontensteuerung für Admin Rechte startet nur im Hintergrund
 
Ja klar, stimmt. Jetzt funktioniert. Vielen Dank für die Expressantwort.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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