Wait for a process to end


#1

I have an app that uses startAsProcess to launch an EXE. I’d like to wait for that EXE to finish doing its thing then display a log from it. The amount of time the EXE takes to finish is arbitrary. It doesn’t look like there’s anything that would give me a process handle when I launch the EXE, and nothing that would be able to tell me when it’s finished. I don’t see any InterprocessConnection stuff that would help, either.

I might be able to use File::getLastModificationTime on one of the two files the EXE creates, as long as the files are only written when the process exits (not sure), but I was hoping there was a more normal way to see when the process ended.

Thanks!


#2

InterprocessConnection has a connectionLost callback.

If you’re providing the EXE you’re running then you can make it connect back to your app. When it stops you’ll get the callback.

Bruce


#3

The EXE is not an app I designed and not something I can rewrite using JUCE.


#4

If you are out for a quick hack on Windows, you could start the external app through a Windows shell script.

The script can monitor the status of the process and write a file or use some other mechanism to signal your Juce app that the process has ended.

For Windows Script Host docs you may start here:
http://msdn.microsoft.com/en-us/library/2f38xsxe(VS.85).aspx

Alternatively you could use _spawnl(…) to start the process instead of ShellExecute which is a real high level function that does not return a process handle.
For docs on the C-Runtime lib function _spawnl(…) see
http://msdn.microsoft.com/en-us/library/wweek9sc(VS.80).aspx

Good luck


#5

while I don’t know the method off the top of my head, you should be able to retrieve the handle of a running process, and with the handle use something like WaitForSingleObject to block until the process exits.