gpt4 book ai didi

c# - NCron 默认记录器写入事件日志,抛出 SecurityException

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:57 26 4
gpt4 key购买 nike

简单的 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;,但没有任何改变。

缺少创建自定义日志工厂(我不想这样做)或摆弄注册表(我真的不想这样做,但有时可以't 在生产机器上),我该如何解决这个问题?

最佳答案

如果您不想写入事件日志,则需要提供备用记录器和工厂。如 https://code.google.com/p/ncron/wiki/Logging 底部所述页面,有一个可用的 log4net 实现,其最新版本似乎驻留在 https://github.com/schourode/ncron/tree/master/src/NCron.Integration.log4net .如果您不想使用 log4net,编写替代实现将非常简单。

如果您愿意允许 NCron 写入事件日志,您可以通过在运行服务之前在管理员帐户下创建目标事件日志来避免运行时 SecurityException。这通常通过在安装程序中创建事件日志(假设您有一个)来完成,例如使用 EventLogInstaller .

关于c# - NCron 默认记录器写入事件日志,抛出 SecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14649961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com