Toon posts:

[Delphi] CreateProcess

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil vanuit een delphi progje een exe op de cmdline uitvoeren. Dit gaat goed met ShellExecute, maar omdat ik wil wachten tot de exe gestopt is, wil ik CreateProcess gebruiken.

Ik doe dit:
Delphi:
1
2
3
4
5
6
7
8
9
10
CreateProcess('command.com', 
               CmdLineStr, 
               nil, 
               nil, 
               false,   
               NORMAL_PRIORITY_CLASS, 
               nil, 
               nil, 
               startinfo, 
               proc_info);


Dit is dezelfde manier zoals die ik in diverse toppics op GoT heb gezien, dus daar ligt volgens mij het probleem niet. Maar waar zit het probleem dan wel??

Dan moet ik natuurlijk wel ff zeggen wat het probleem is he. 8)7

Het probleem is dat CreateProcess altijd de waarde false terug geeft, dus dat er geen dos box opstart en dus ook dat mijn exe niet wordt uitvoerd.

[ Voor 42% gewijzigd door Verwijderd op 04-02-2003 13:33 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Wat is het probleem uberhaupt?!

We adore chaos because we like to restore order - M.C. Escher


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Bestaat command.com wel? Is het niet cmd.exe? Moet je misschien het hele pad meegeven?

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
De cmd staat in het PATH, dus das is goed. Maar als ik alleen een dos box wil opstarten, werkt dit ook niet.

Zelfs dit werkt niet. Ik krijg geen foutmelding, CreateProcess wordt gewoon false.
Delphi:
1
2
3
4
5
6
7
8
9
10
CreateProcess('cmd.exe', 
              nil, 
              nil, 
              nil, 
              false, 
              NORMAL_PRIORITY_CLASS, 
              nil, 
              nil, 
              startinfo, 
              proc_info);

  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 22:18
this should do the trick ;)

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  FillChar(StartUpInfo, SizeOf(StartUpInfo), #0);
  StartUpInfo.cb  := SizeOf(StartUpInfo);
  StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartUpInfo.wShowWindow := SW_NORMAL;
  if CreateProcess(nil,
                   Pchar('cmd.exe'),
                   nil,
                   nil,
                   False,
                   CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
                   nil,
                   nil,
                   StartUpInfo,
                   ProcessInfo) then
  begin
    ...
  end;

[ Voor 4% gewijzigd door Just_a_Gamer op 04-02-2003 15:23 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Just_a_Gamer schreef op 04 February 2003 @ 15:18:
this should do the trick ;)

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  FillChar(StartUpInfo, SizeOf(StartUpInfo), #0);
  StartUpInfo.cb  := SizeOf(StartUpInfo);
  StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartUpInfo.wShowWindow := SW_NORMAL;
  if CreateProcess(nil,
                   Pchar('cmd.exe'),
                   nil,
                   nil,
                   False,
                   CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
                   nil,
                   nil,
                   StartUpInfo,
                   ProcessInfo) then
  begin
    ...
  end;


Ipv enkel code te posten die het probleem oplost, is het voor de topicstarter misschien wel veel handiger mocht je er ook nog eens bij vertellen waarom deze code zou moeten werken en wat ze precies doet.
Zo leren anderen ook nog eens iets bij. ;)

https://fgheysels.github.io/


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 22:18
Ik weet niet hoe de TS de startupinfo heeft ingesteld maar volgens mij was hij de showWindow van de startup info vergeten op SW_Normal te zetten. Dit is een pure gok want in Startupinfo staan de properties van de nieuwe window die aangemaakt moet worden.

Ik hoop dat dit iets duidelijker is. Misschien dat de TS zijn oude StartupInfo structuur wilt posten :?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 04 February 2003 @ 13:12:
Ik wil vanuit een delphi progje een exe op de cmdline uitvoeren. Dit gaat goed met ShellExecute, maar omdat ik wil wachten tot de exe gestopt is, wil ik CreateProcess gebruiken.
Als je ShellExecuteEx gebruikt krijg je ook gewoon de processhandle (hProcess) terug zodat je erop kunt wachten hoor.

I quote uit de helpfiles van ShellExecute:
To obtain information about the application that is launched as a result of calling ShellExecute, use ShellExecuteEx.

Professionele website nodig?


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 22:18
curry684 schreef op 05 February 2003 @ 14:21:
[...]

Als je ShellExecuteEx gebruikt krijg je ook gewoon de processhandle (hProcess) terug zodat je erop kunt wachten hoor.

I quote uit de helpfiles van ShellExecute:

[...]
Die kan je ook via createprocess krijgen. In de processinfo structure zit een member hProcess. En daar staat de handle van de nieuwe process.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Just_a_Gamer schreef op 05 February 2003 @ 15:16:
Die kan je ook via createprocess krijgen. In de processinfo structure zit een member hProcess. En daar staat de handle van de nieuwe process.
Dank voor het vermelden van compleet overbodige informatie gezien het feit dat de topicstarter het via ShellExecute wel gedaan kreeg en via CreateProcess niet. Daarom vermeldde ik dat ShellExecuteEx exact hetzelfde doet als ShellExecute (en dus ook zal werken) en wel de handle teruggeeft.

Professionele website nodig?

Pagina: 1