问题
I have to develop an application using C#.net that has to be run once a day. It only runs for at most one minute, so developing a Windows service is overkill and a scheduled task is the appropriate way.
However, I have a few questions about how the application can communicate its results:
- How do I indicate to the task scheduler that the task has failed? Is this via the program's exit code?
- How do I log output information? Is console output automatically captured or do I have to write to the event viewer explicitly?
回答1:
In answer to your questions -
If a task fails because it threw an unchecked exception you'll see that in the Sheduled Task viewer, there will be a 'Last Result' with a value something like
0xe0434f4d
. Alternatively if you return an exit code that will be also be shown in the Last Result column of the Scheduled Task viewer.Writing to the console e.g.
Console.WriteLine("blah");
won't show up anywhere. You'd need to write to the event log or to a log file.
回答2:
If you go the Log File way, you can still use Console.WriteLine("blah");
. The trick is to redirect the standard Out and Error streams:
StreamWriter mylog = new StreamWriter("mylog.log");
Console.SetOut(mylog);
Console.SetError(mylog);
You also need to flush the buffers often, to make sure the log file contains current information.
Console.Out.Flush();
This is quick and dirty, you really should use the Windows Event Log or log4net.
回答3:
AFAIK the scheduler just kicks off a process. You can use the event log or another logging system to record the information you need to refer to later.
回答4:
Log4net is a very good, complete logging framework. I can highly recommend it.
来源:https://stackoverflow.com/questions/173431/developing-a-scheduled-task-for-windows