Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frage zu Vista UAC und ShellExecute (https://www.delphipraxis.net/92081-frage-zu-vista-uac-und-shellexecute.html)

Assertor 14. Mai 2007 11:13


Frage zu Vista UAC und ShellExecute
 
Hallo DPler,

ich habe einen Updater für ein Programm geschrieben. Das funktioniert auch alles soweit, UAC und Zugriffsrechte sind berücksichtigt.

Jetzt habe ich nur das Problem, daß das Updater-Setup einen UAC Dialog minimiert auslöst.

Das Updater-Setup wird in das Temp-Verzeichnis des Users geladen und gestartet (verlangt Admin Rechte). Mein Hauptprogramm wird erst nach bestätigung des UAC Dialogs geschlossen.

Gibt es also
  • Eine Möglichkeit, daß Ergebnis des ShellExecuteW abzufragen, damit ich weiß ob der User das Setup wirklich starten konnte
  • Ich den UAC Dialog nach vorne bringe, statt als übersehbarer Taskleisten UAC Ankündigung?

Kennt sonst jemand einen Weg, nicht auf das ShellExecute zu warten und das Hauptprogramm direkt zu beenden? Sozusagen, bevor der UAC Dialog kommt?

Gruß winkel79

Semmel 14. Mai 2007 12:31

Re: Frage zu Vista UAC und ShellExecute
 
mit ShellExecute weis ich keine Lösung, aber mit CreateMutex an dein Hauptprogramm kann eine Möglichkeit sein
Delphi-Quellcode:
  hMutex := CreateMutex( nil, false, 'meinHauptprogramm VX.XX');
  if WaitForSingleObject( hMutex, 50 ) = WAIT_TIMEOUT then begin
    SendMessage( HWND_BROADCAST, WM_MUTEX, 77501, 999501 );
    Application.Terminate;
  end;

Luckie 14. Mai 2007 12:42

Re: Frage zu Vista UAC und ShellExecute
 
Und was hat das jetzt mit dem Problem zu tun? Ausser dass du alle alle Fenster zwei Integerwerte schickst?

Assertor 14. Mai 2007 12:53

Re: Frage zu Vista UAC und ShellExecute
 
Ja, des mit dem CreateMutex verstehe ich auch nicht ganz in diesem Zusammenhang.

Nach etwas Suchen habe ich das Problem eingrenzen können:
Die UAC prüft, ob das Aufrufende Handle den Focus hat bei ShellExecute. Also übergebe ich jetzt mal statt hInstance das Aktuelle Form.Handle und lege vorher den Focus auf es.

Quelle: MSDN UAC Taskleisten Prompt

Aber schön ist das noch nicht. Geht gerade über Terminalserver z.B. nicht. Und für einen simplen Updater gleich ein COM-Interface mitinstallieren, um Zugriffsrechte auf das Programmverzeichnis zu haben - da fühl ich mich nicht wohl. Nicht das das ein Sicherheitsloch aufreißt.

Besteht denn irgendwie die Möglichkeit, beim ShellExecute nicht zu warten. Oder ist dies die Auswirkung des UAC, daß erstmal alles gestoppt wird?

Gruß winkel79

Assertor 14. Mai 2007 12:58

Re: Frage zu Vista UAC und ShellExecute
 
So, nun hab ichs. Ich danke mir ;)

Das ShellExeute muß als Handle den Wert des GetForegroundWindow erhalten. Dann kommt der UAC Prompt immer maximiert.

Danke auch an die anderen für das Interesse. Ist ja nicht bei all meinen Threads so :?

Gruß winkel79

sh17 15. Mai 2007 07:25

Re: Frage zu Vista UAC und ShellExecute
 
Zitat:

Zitat von winkel79
Danke auch an die anderen für das Interesse. Ist ja nicht bei all meinen Threads so :?

Das ist aber sicherlich nicht persönlich gemeint. :cheers:

Assertor 15. Mai 2007 09:13

Re: Frage zu Vista UAC und ShellExecute
 
Zitat:

Zitat von sh17
Das ist aber sicherlich nicht persönlich gemeint. :cheers:

Weiß ich doch, vermute das liegt an den zu komplexen Titeln und Texten. Will halt nur nicht so viel hin und her - deswegen ist es halt sehr detailreich ;)

Danke auf jeden Fall! :cheers:

Gruß winkel79


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