简单的 Ncron 服务:
class Program
{
static void Main(string[] args)
{
var schedService = new SchedulingService();
schedService.At("* * * * *").Run<MyTask>(); // run every minute
schedService.Start();
Console.ReadLine();
}
}
public class MyTask : NCron.ICronJob
{
public void Execute()
{
Console.WriteLine("executing");
}
public void Initialize(NCron.CronContext context)
{
}
public void Dispose()
{
}
}
在到达第一分钟但在执行 MyTask 之前,NCron 似乎想要写入 Windows 事件日志,但失败并显示
Unhandled Exception: System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. To create the source, you need permission to read all event logs to make sure that the new source name is unique. Inaccessible logs: Security.
at System.Diagnostics.EventLogInternal.FindSourceRegistration(String source, String machineName, Boolean readOnly, Boolean wantToCreate)
at System.Diagnostics.EventLogInternal.SourceExists(String source, String machineName, Boolean wantToCreate)
at System.Diagnostics.EventLogInternal.VerifyAndCreateSource(String sourceName, String currentMachineName)
at System.Diagnostics.EventLogInternal.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type)
at NCron.ExceptionHelper.LogUnhandledException(Object exception)
at NCron.Service.SchedulingService.WaitCallbackHandler(Object data)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()`
NCron 写入事件日志的内容和原因是什么?这是默认行为,所以我想任何使用 NCron 的人都必须处理过这个问题,但我找不到任何关于这个问题的文档或问题/答案。我尝试了设置schedService.LogFactory = null;
,这并没有改变任何东西。
缺少创建自定义日志工厂(我不想这样做),或摆弄注册表(我真的不想这样做,有时不能在生产机器上),我该如何解决这个问题?