Windows服务不会以本地用户身份启动

时间:2013-04-18 22:02:41

标签: vb.net windows-services

编辑2:我现在认为这是我尝试运行该服务的机器的问题。我尝试将服务移动到设置类似的其他计算机,即使作为本地用户,服务也能够成功启动。现在我只需要弄清楚两台机器之间有什么不同......


我有一个Windows服务项目(用VB.net编写),安装和配置启动类型为Automatic,Log On As设置为Local User帐户。此服务将在计算机首次启动时启动。但是,如果我停止服务并尝试再次启动它,我会收到“错误1053:服务没有及时响应启动或控制请求。”立即。但是,如果我将“登录为”更改为“本地系统帐户”,则服务将启动。

要点:

  • 当计算机首次启动时,服务将以本地用户身份运行
  • 如果手动启动,服务将不会以本地用户身份运行
  • 当计算机首次启动时,服务将作为本地系统运行
  • 如果手动启动,服务将作为本地系统运行

我已经读过错误1053是由OnStart方法没有足够快地返回引起的。该服务之前已经启动,并且我立即收到错误消息,这让我相信超时不是正在发生的事情。为了验证这一点,我创建了一个全新的Windows服务项目,并且没有更改我构建和安装的任何内容。我得到了同样的行为。

我对发生的事情感到茫然。据我所知,本地用户具有运行服务的所有正确权限(事实上,当计算机首次启动时,它将从这些凭据开始),并且OnStart方法不是'实际上是超时(正如显示相同行为的完全空白的哑服务所证明的那样)。

关于什么阻止服务启动的任何想法,或者我可以在哪里寻找更好的错误消息(我已查看应用程序事件日志,但没有显示在那里)?

修改: 以下是我创建的哑服务的代码(使用here中的EventLogger作为模块)。

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.
    EventLogger.WriteToEventLog("On Start")
End Sub

Protected Overrides Sub OnStop()
    ' Add code here to perform any tear-down necessary to stop your service.
    EventLogger.WriteToEventLog("On Stop")
End Sub

同一项目的主要方法。

' The main entry point for the process
<MTAThread()> _
<System.Diagnostics.DebuggerNonUserCode()> _
Shared Sub Main()
    EventLogger.WriteToEventLog("Starting Main Method")
    Dim ServicesToRun() As System.ServiceProcess.ServiceBase

    ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1}

    System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    EventLogger.WriteToEventLog("Leaving Main Method")
End Sub

当我尝试以本地用户身份运行服务时,事件日志中没有显示任何消息,我收到错误1053.当我作为本地系统运行服务时,消息显示在事件日志中。

我需要以本地用户身份运行实际服务的原因是它可以访问网络共享。我目前正在考虑使用Windows用户模拟,但我仍然认为我应该能够以本地用户身份启动简单服务。

1 个答案:

答案 0 :(得分:0)

使用this resource创建事件记录器。然后将你的代码包装在try / catch b / c中的每个子代码中,很可能在你的OnStart子上发生阻止服务启动的事情。发布您的onstart,onstop和/或服务主要部分的一些示例代码,并阐明您需要使用本地用户与本地系统的原因。