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/)
-   -   Delphi Programmstart per ShellExecute vs. CreateProcess (https://www.delphipraxis.net/61386-programmstart-per-shellexecute-vs-createprocess.html)

SittingDuck 20. Jan 2006 17:10


Programmstart per ShellExecute vs. CreateProcess
 
Moin Moin ...

Ich habe eine Schnellstart-Leiste programmiert, die
gerade hier:Launcher
vorgestellt wird. Sämtliche Programstarts werden dort
per ShellExecute ausgefüht.
Das klappt zwar vorbildlich jedoch habe ich gerade
beim Stöbern in der Code-Library gelesen, daß ich
ein 'Abfallprodukt' benutze ! :shock:

Siehe Beitrag:CreateProcess

Es wäre ein Leichtes umzusatteln auf die CreateProcess-Routine
aber mir ist noch unklar, wo genau dann meine Vorteile wären.

Danke für Eure Hilfe.

ichbins 20. Jan 2006 17:21

Re: Programmstart per ShellExecute vs. CreateProcess
 
createprocess ist eben noch dierekter als shellexecute und somit schneller.

Shellexecute ist eben die "Funktion für alles", die, falls der command open lautet, erst überprüft, ob die Datei eine executable ist, und wenn ja, diese per createprocess startet, und andernfalls die verknüpfte Anwendung mit createprocess und den entsprechenden Parametern startet.

Es könnte allerdings auch sein, dass jemand mit dem Launcher eine andere Datei als eine EXE laden will und dann würde CreateProcess meckern.
Ich denke dass es auf diese paar Millisekunden Zeitgewinn nicht ankommt (command auf 'open' überprüfen, Registry auslesen, createprocess aufrufen)

ich würde die createprocess allerdings nicht mit einem Abfallprodukt vergleichen sondern eher damit wenn du aus Komfort nicht die dierekte nonVCL- sondern die "um-fünf-Ecken" VCL verwendest.

Khabarakh 20. Jan 2006 17:38

Re: Programmstart per ShellExecute vs. CreateProcess
 
Zitat:

Zitat von ichbins
ich würde die createprocess allerdings nicht mit einem Abfallprodukt vergleichen sondern eher damit wenn du aus Komfort nicht die dierekte nonVCL- sondern die "um-fünf-Ecken" VCL verwendest.

Öhm... ShellExecute ist auch eine WinAPI-Funktion :gruebel: . Und wenn, dann wäre es wohl eher eine RTL-Funktion :wink: .
Der große Vorteil von CreateProcess ist, dass die Funktion eben nur für Prozesse gedacht ist und deshalb einige interessante Parameter mehr zur Verfügung stellt.

SirThornberry 20. Jan 2006 17:55

Re: Programmstart per ShellExecute vs. CreateProcess
 
CreateProcess ist einfach interessant wenn man ein Programm nicht nur starten will sondern dabei auch noch etwas festlegen will. Mit CreateProcess kann man ein Programm auf einem anderen Desktop starten, die Standardeingabe und Standardausgabe umleiten und vieles mehr. Wenn du aber einfach ein Programm nur simpel (wie im Explorer) starten willst reicht ShellExecute.

SittingDuck 20. Jan 2006 18:07

Re: Programmstart per ShellExecute vs. CreateProcess
 
OkeeDokee ...

Also eher mehr Probleme als Vorteile ...
Hm ... dann betreibe ich also doch keinen
'Mißbrauch', Alles ist gut und bleibt wie es ist.

Übrigens das mit 'Abfallprodukt' ist O-Ton
von 'Luckie' (s.o.) :lol:


Zitat:

Also um zum Beispiel eine Textdatei zu drucken ruft man Shellexecute mit dem Verb 'print' und der entsprechenden Datei auf. Das man damit auch fremde Anwendungen starten kann ist ein Abfallprodukt und ist eher als Mißbrauch zu sehen.

Wenn man es richtig machen will, sollte man CreateProcess benutzen.
Wieder legal und kein bischen kriminell grüßt

Christian Seehase 20. Jan 2006 21:03

Re: Programmstart per ShellExecute vs. CreateProcess
 
Moin SittingDuck,

ausser CreateProcess kommt dann vielleicht auch noch MSDN-Library durchsuchenShellExecuteEx in Frage, da es eher ein CreateProcess, als ein ShellExecute ist


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