Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Too stupid to execute and wait (https://www.delphipraxis.net/162142-too-stupid-execute-wait.html)

QuickAndDirty 9. Aug 2011 13:24

AW: Too stupid to execute and wait
 
Zitat:

Zitat von Luckie (Beitrag 1115777)
MainFormHandle kannte mein D7 nicht, deswegen nur Handle. Und GetForeGroundWindow ist gefährlich, da dein Programmfenster beim ausführen des Codes nicht das oberste Fenster sein muss.

ok, sollten aber jetzt soweit alle mit dem code einverstanden sein???

ChrisE 9. Aug 2011 13:26

AW: Too stupid to execute and wait
 
[WITZ]Code? ... einverstanden? ... ich dachte wir reden hier über Glaubensfragen ;-)[/WITZ]
Gruß, Chris

sirius 9. Aug 2011 13:58

AW: Too stupid to execute and wait
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1115750)
WaitForSingleObject produziert scheinbar wie vorgesehen einen deadlock wenn der aufgerufen prozess ein neues Fenster erzeugt.
Und die msdn hatte recht...(seltsam) mit MsgWaitForMultipleObjects geht es dann trotzdem.

Es funzt, aber keiner weiß warum. Das ist unbefriedigend.

Ich vermute:
Du hast bei Shellexecute dein eigenes WindowHandle angegeben. Anscheinend werden aus deiner setup.exe dahin Messages gesendet o.ä. Und MsgWaitforMultipleObjectes geht auch bei ankommenden Messages raus. Jetzt ist nur die Frage, was für Messages kommen denn da rüber? Kannst die ja mal mit PeekMessage abholen wenn R=Wait_Object_0 + 1 ist.

QuickAndDirty 9. Aug 2011 14:42

AW: Too stupid to execute and wait
 
Nun diese funktion ist einfach ein krasser fall von Copy Paste Programmierung...und jetzt musste ich auf einmal verstehen was da schief läuft....
...bis ich eben die MSGWAITFORMultipleObjects methode in der MSDN fand....
Im Moment leigt kein Interresse daran vor Windows weiter zu verstehen.....^^ ...äääh...doch liegt es....

Das SEE_MASK_NOZONECHECKS flag

bringt mir das irgendwelche Vorteile, wenn ich die SFX.exe sowieso mit "als Administrator Ausführen" starten muss damit es läuft?

samso 9. Aug 2011 18:23

AW: Too stupid to execute and wait
 
Himitsu hat zwar recht damit, dass Application.ProcessMessages auch das Einfrieren der Hauptanwendung vermeidet, aber deshalb wurde diese Sequenz ja nicht eingebaut. Sondern damit sollte der Deadlock verhindert werden. Ich behaupte, dass der Deadlock wegen der Verwendung des "SEE_MASK_NOASYNC"-Flags entsteht. Falls das richtig sein sollte, würde das Hauptmotiv für die Einführung MSGWAITFORMultipleObjects und Application.ProcessMessages zunächst mal wegfallen. Ob Du es dann wieder einführst, um das Einfrieren der Hauptanwendung zu verhindern, steht auf einem anderen Blatt.

SEE_MASK_NOZONECHECKS vermeidet lediglich eine Nachfrage, falls man das Setup-Programm von einem Netzwerklaufwerk gestartet werden soll. Das hat also mit dem hier diskutierten Problem nichts zu tun.

QuickAndDirty 10. Aug 2011 13:46

AW: Too stupid to execute and wait
 
Ich teste das mal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 Uhr.
Seite 5 von 5   « Erste     345   

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