![]() |
CreateProcessAsUser + Link gegen VCLPackage = kein Application.Handle
Hi,
Ich habe gerade ein merkwürdiges Problem: Mein Service erstellt per CreateProcessAsUser eine GUI-Applikation im Kontext des aktuell aktiven Benutzers (steht nicht zur diskussion!). Dabei habe ich festgestellt, dass ich Probleme mit Synchronize von TThread habe. Nachdem ich ein wenig nachgeforscht habe, musste ich feststellen, dass Application.Handle $0 ist. Dass dann WakeMainThread nicht geht und sich einiges weghängt ist logisch. Aus irgendeinem grund wird TApplication.CreateHandle nicht aufgerufen, oder liefert kein Handle. Gui-Applikation ist gegen vcl und rtl packages gelinkt. Starte ich das Programm per doppelklick funktioniert alles. Andere Möglichkeit: Gegen keine Packages linken. Das geht aber aufgrund von Plugins die später geladen werden nicht (zum testen habe ich die Plugins ausgeschaltet, es ist gerade nurnoch eine nakte MainForm). Andere Lösung, in der DPR am Anfang einfach Application.CreateHandle aufrufen. (Hab auch noch gefühlt nen anderes dutzend workarounds die tadelos gehen, ich will nur verstehen was hier passiert). Zum aufrufen: Nachdem der UserToken der aktiven session geholt wurde, und ein EnvironmentBlock erstellt wurde, wird folgendes aufgerufen:
Delphi-Quellcode:
In StartupInfo ist der Desktop entsprechend auf 'Winsta0\Default' gesetzt.
CreateProceAsUser(Token, nil, CommandLine, nil, nil, False, 0, EnvironmentBlock, nil, StartupInfo, ProcessInfo)
Jemand eine AHnung, was das Phänomen verursachen könnte? Innerhalb von CreateHandle wird auf not IsConsole überprüft, der auffruf von CreateHandle ist mit not IsLibrary abgedeckt. Nen Grund warum die Variablen vllt innerhalb der packages gesetzt werden? Grüße Memnarch |
AW: CreateProcessAsUser + Link gegen VCLPackage = kein Application.Handle
Erstell den Prozess mal suspended und häng dann den Delphi Debugger an. Da müsstest du ja dann sehen, welcher Aufruf mit welchem Fehlercode fehlschlägt.
|
AW: CreateProcessAsUser + Link gegen VCLPackage = kein Application.Handle
Darauf war ich noch gar nicht gekommen, werd ich mir mal angucken.
EDIT: achja, es trat ja nur auf, wenn ich gegen VCL/RTL packages linke und wie soll ich die unter XE debuggen? |
AW: CreateProcessAsUser + Link gegen VCLPackage = kein Application.Handle
Mit Debug-DCUs ist das eigentlich kein Problem soweit ich mich erinnere. Aber es stimmt schon, bei Runtime Packages bin ich mir nicht ganz sicher, ich dachte ich hätte die auch schon drin gehabt.
|
AW: CreateProcessAsUser + Link gegen VCLPackage = kein Application.Handle
Okay habs durch Zufall lösen können:
![]() Zitat:
Grüße Memnarch |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr. |
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