This is what I replied to the original message in this thread (from Peter
Horsboll Moller).  It is _very_ reliable and I use it to control imut.exe
from an mbx.  I also use these API calls from C++ and they work fine.


Someone posted code like it to the list some years ago, but I don't know who
to credit.


Function ExecuteAndWait(cmdLine as string) as integer

Dim nRetVal as integer
Dim NameOfProc as Process_Information, NameStart as StartUpInfo

        NameStart.cb = 256
        NameStart.dwFlags = 1
        NameStart.wShowWindow = 0
        nRetVal = CreateProcessA(0, cmdLine, 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0,
NameStart, NameOfProc)
        nRetVal = NameOfProc.hProcess
        nRetVal = WaitForSingleObject(NameOfProc.hProcess, INFINITE)
        nRetVal = CloseHandle(NameOfProc.hProcess)

End Function



Hope this helps.

Best Regards,

Martin Higham
Avantra Geosystems

ph (61 3) 8504 0428   0425-730-428
fx (61 3) 9596 7997
www.avantra.com.au




> -----Original Message-----
> From: Mickey Feldman [mailto:[EMAIL PROTECTED]
> Sent: Friday, 9 April 2004 02:51
> To: [EMAIL PROTECTED]
> Subject: MI-L more on WinExecute and Wait.... (long-winded)
>
>
>
> My original problem was automated conversion of many files from
> TAB to SHP as
> part of a multi-stage conversion (The SHP's were then further
> converted by a
> closed app that did not recognize TABs)
>
> Several suggestions were:
>
> 1) use a command line with the /wait parameter (Bill Thoen)
>
> 2) monitor a "sentinel" file  -  in the last line of the batch
> file delete the
> file then while fileexists(sentinel file) do Application.Processmessages
> (Trey Pattillo)
>
> In my experience these are not a whole answer. My program builds
> a batch file
> that looks like this (ignore the line wrap around...):
>
> Start "TS2" /wait /b "C:\Program Files\MapInfo\Professional\UT\IMUT.EXE"
> usa7200.XXX
> Start "TS2" /wait /b "C:\Program Files\MapInfo\Professional\UT\IMUT.EXE"
> usa720102.XXX
> Start "TS2" /wait /b "C:\Program Files\MapInfo\Professional\UT\IMUT.EXE"
> usa7203.XXX
>
> ...followed by many more lines with only the .XXX file changed.
> XXX is a file
> build by calling IMUT with generate, etc. (My data is not X rated, I just
> found it important to choose an extension that was not associated
> with some
> other program.)
>
> When this is run, task manager shows as many as 15 instances of IMUT.EXE
> running - clearly line two is not waiting for line one to finish,
> but on the
> other hand, since these are separate processes they don't
> interfere with each
> other, which is the first thing I cared about. They finish at different
> times, and when each finishes apparently depends on how much
> processing it
> has to do - not in what order it was started.
>
> Problem #2 concerns checking for the presence of a dummy file
> created at the
> beginning of the batch and delete at the end. Say you have a three stage
> batch, first you create a dummy file, then you start a process
> such as IMUT
> which creates an output file, finally, you delete the dummy file.
> Problem is,
> as above, step three does not wait for step two. While IMUT may well have
> _created_ it's output file before the sentinel file is deleted, it may
> continue to write to that output file for a long time (60 seconds, on my
> machine, depending on amount of data). I cannot actually access
> the output
> file for further processing until IMUT is finished writing to it,
> even though
> my dummy file has long since disappeared. Checking the access
> properties of
> the output file would probably work, but that's not the same thing.
>
> What my program is doing now, and what works, is creating a batch file as
> described above to convert each of a group of files using IMUT. After it
> launches the batch file it waits a short time (1 second) to make
> certain the
> process is running and can be detected. It then enumerate the windows
> processes looking for IMUT.EXE, while doing
> Application.ProcessMessges. If
> IMUT.EXE is not found - some number of  times in succession (I
> finally used
> 30) - it considers that IMUT has finished and the the next stage of
> processing may take place. I found that it really was necessary
> both to wait
> before looking for process IMUT and also to check for its non-presence a
> large number of times in a row. Since Windows takes a 'snapshot' of the
> running processes which we are starting successively, it's
> possible to catch
> it at a point where a given process apparently falls through the
> cracks. I
> figure the 1 second wait and the couple of milliseconds of 30
> iterations of
> process checking are acceptable in the circumstanes.
>
> Having said all that, I don't know why the routines that use
> CreateProcess
> followed by WaitForsingleObject don't seem to work. I'd be interested in
> seeing Bo Thomsen's DLL if it includes source, to see what the
> differences
> are between that implementation and the ExecAndWait functions
> I've seen that
> use CreateProcess and WaitForsingleObject.
>
> My program (in Delphi, with source) will be available to whoever is
> interested, as soon as I've cleaned it up a bit. (And edited it
> to a version
> that does not include all the processing following the Tab to Shape
> conversion, which no one here is likely to care about....)
>
> Mickey
>
> --
> Mickey Feldman
>
> [EMAIL PROTECTED]
>
> 1) Please reply to List/Newsgroup, not directly unless
> specifically requested.
> If it's a useful answer other will be interested too.
> 2) I'm on digest on all lists - don't take a slow reponse personally.
>
>
> ---------------------------------------------------------------------
> List hosting provided by Directions Magazine | www.directionsmag.com |
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> Message number: 11337
>


---------------------------------------------------------------------
List hosting provided by Directions Magazine | www.directionsmag.com |
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
Message number: 11359

Reply via email to