我正在尝试从Windows服务写入应用程序日志。
我使用visual studio 2013(vb.net)创建了一个Windows服务
我已将以下内容添加到app.config文件中:
<system.diagnostics>
<sources>
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="EventLog"/>
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
<sharedListeners>
<add name="EventLog"
type="System.Diagnostics.EventLogTraceListener,
System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="My Service"/>
</sharedListeners>
</system.diagnostics>
我的应用代码如下所示:
Protected Overrides Sub OnStart(ByVal args() As String)
' Add code here to start your service. This method should set things
' in motion so your service can do its work.
My.Application.Log.WriteEntry("My service started.", TraceEventType.Information)
End Sub
这是错误:
Service cannot be started. 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.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly, Boolean wantToCreate)
at System.Diagnostics.EventLog.SourceExists(String source, String machineName, Boolean wantToCreate)
at System.Diagnostics.EventLogInternal.VerifyAndCreateSource(String sourceName, String currentMachineName)
at System.Diagnostics.EventLogInternal.WriteEvent(EventInstance instance, Byte[] data, Object[] values)
at System.Diagnostics.EventLog.WriteEvent(EventInstance instance, Object[] values)
at System.Diagnostics.EventLogTraceListener.TraceEvent(TraceEventCache eventCache, String source, TraceEventType severity, Int32 id, String message)
at System.Diagnostics.TraceSource.TraceEvent(TraceEventType even...
我正在“本地服务”帐户下运行我的服务。
用于运行简单维护任务服务的最佳内置帐户是什么,我真的不想更改安全设置 - 只是希望它尽可能少地使用配置。该服务将在Windows服务器上运行。
更新
我尝试了本地系统帐户,该工作正常。
但是我可以在未登录的情况下在Windows服务器上使用此帐户吗?
答案 0 :(得分:0)
您可以在未登录的情况下将本地系统帐户用于Window Server上的服务。这不是问题。
问题是,您真的想使用本地系统帐户吗?通常它具有太高的权限,这意味着这可能是一种安全风险。
您使用本地服务帐户时最初获得的安全例外是由于该帐户具有执行该任务的权限太少这一事实。这是因为调用了SourceExists方法,你可以在这里找到不允许本地服务的权利:http://msdn.microsoft.com/en-us/library/6s7642se(v=vs.110).aspx
因此,如果您不关心安全风险,例如,如果这是一个独立的系统,那么您可以使用本地系统帐户。
如果您担心,您可以随时在Windows Server上创建本地帐户并自行设置相应的权限,以便准确了解允许的内容和不允许的内容。