编辑 2:我现在认为这是我试图在其上运行服务的机器的问题。我尝试将服务移动到设置类似的另一台机器上,即使作为本地用户,该服务也能够成功启动。现在我只需要弄清楚两台机器之间有什么不同......
我有一个 Windows 服务项目(用 VB.net 编写),该项目已安装并配置为自动启动类型,并将登录身份设置为本地用户帐户。此服务将在计算机首次启动时启动。但是,如果我停止服务并尝试再次启动它,我会收到“错误 1053:服务没有及时响应启动或控制请求”。立即地。但是,如果我将登录身份更改为“本地系统帐户”,则该服务将启动。
概括:
- 计算机首次启动时服务将以本地用户身份运行
- 如果手动启动,服务将不会以本地用户身份运行
- 计算机首次启动时服务将作为本地系统运行
- 如果手动启动,服务将作为本地系统运行
我读过错误 1053 是由 OnStart 方法返回不够快引起的。该服务之前已启动,并且我立即收到错误消息这一事实使我相信超时不是正在发生的事情。为了验证这一点,我创建了一个全新的 Windows 服务项目,并且没有更改我构建和安装的任何内容。我得到同样的行为。
我不知道发生了什么。据我所知,本地用户拥有运行服务的所有正确权限(这可以从计算机首次启动时使用这些凭据启动这一事实明显看出),并且 OnStart 方法不是t 实际上超时(完全空白的哑服务表现出相同的行为就可以看出这一点)。
关于阻止服务启动的原因,或者我可以在哪里寻找更好的错误消息的任何想法(我查看了应用程序事件日志,但那里没有显示任何内容)?
编辑: 这是我创建的愚蠢服务的代码(使用此处的 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
和同一个项目的Main方法。
' 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 用户模拟,但我仍然认为我应该能够以本地用户的身份启动一个简单的服务。