今天我编写了我的第一个windows服务,下面是非常有用的演练:http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx。
一切都很好。
当我让服务开始工作时,我开始编辑它,以获得我真正的代码,这也很好。
但是,我发现如果在下面的代码中更改事件日志或源的名称,则服务将不会启动。将其更改为演练中使用的名称,可以让服务重新启动。
eventLog1 = new System.Diagnostics.EventLog();
if (!System.Diagnostics.EventLog.SourceExists("TwitterService"))
{
System.Diagnostics.EventLog.CreateEventSource(
"TwitterService", "TwitterLog");
}
eventLog1.Source = "TwitterService";
eventLog1.Log = "TwitterLog";
我只能猜测注册表包含对服务名称和日志文件的某种引用,除非它们匹配,否则不允许它运行,所以我已经删除了引用日志的所有注册表项。
但仍然没有运气,在删除注册表项和重新启动服务的原始名称后,键将被重新创建。但不是用其他名字创建的。
如何更改LogFile名称?不是一个节目停止,但希望它有一些参考服务。
干杯
编辑:
多亏了CodeCaster,我发现了有问题的错误消息。
源“TwitterService”未在日志“TwitterLog”中注册。(已在日志“申请”中登记。)
下面是这个帖子:Event log write error,我现在可以正确地启动和记录服务了。
但是,它现在正在登录到“应用程序”日志,并需要行
System.Diagnostics.EventLog.DeleteEventSource("TwitterService");
在检查之前,它的存在是为了让它开始。
如何更改/设置注册TwitterService源的位置?
我从未在任何地方注册过原件(MySource / MyNewLog)。
EDIT2:
这篇文章解释说,需要重新启动才能让它登录到正确的位置。Windows Event Log - how to register an event source? -现在起作用了。
谢谢你的帮助
发布于 2014-10-01 15:21:49
我只能猜测注册表包含对服务名称和日志文件的某种引用,除非它们匹配,否则不允许它运行,所以我已经删除了引用日志的所有注册表项。
否,您的应用程序必须存在事件日志才能对其进行写入,并且您的进程必须具有创建事件日志的管理权限。
如果你在网站的搜索引擎中输入实际的异常文本(在你的问题中是有用的),你会找到非常有用的答案。
发布于 2014-10-01 15:18:49
如果使用示例的事件源名称运行服务一次,则首先卸载旧服务。之后,更改源名并重新安装您的服务。这应该能起作用。
还要确保在EventLogInstaller
组件中更改它们(如果使用的话)。
https://stackoverflow.com/questions/26144465
复制相似问题