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.
I think you're looking for Process.ExitCode, assuming the process returns one. You may need to use WaitForExit() though. There is also an ErrorDataReceived event which is triggered when an app sends to stderr.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With