Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
I'm writing a scheduler or sorts. It's basically a table with a list of exes (like "C:\a.exe") and a console app that looks at the records in the table every minute or so and runs the tasks that haven't been run yet.
I run the tasks like this:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = someExe; // like "a.exe"
p.Start();
How can I tell if a particular task failed? For example what if a.exe throws an unhandled exception? I'd like the above code to know when this happens and update the tasks table with something like "the particular task failed" etc.
How can I do this?
I'm not using the Sql Agent or the Windows Scheduler because someone else told me not to. He has more "experience" so I'm basically just following orders. Feel free to suggest alternatives.
You can catch the Win32Exception to check if Process.Start() failed due to the file not existing or execute access is denied.
But you can not catch exceptions thrown by the processes that you create using this class. In the first place, the application might not be written in .NET so there might not be a concept of exception at all.
What you can do is check on the ExitCode of the application or read the StandardOutput and StandardError streams to check whether error messages are being posted.
In addition to the ExitCode, you can also do something like this:
string output = p.StandardOutput.ReadToEnd();
That will capture everything that would have been written to a command window. Then you can parse that string for known patterns for displaying errors, depending on the app.
–
To expand on what @jop said. You will also need to wait for the process to close. Thus:
p.Start();
p.WaitForExit();
int returnCode = p.ExitCode;
Non-zero codes are typically errors. Some application use negative ones are errors, and positive ones as status codes/warnings.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.