我有一个已经运行的Windows服务。我创建了一个新版本的应用程序。我去了Windows服务器并停止了服务。然后我复制了新的.exe服务并尝试启动该服务。该服务将无法启动,它会超时尝试启动,我无法弄清楚原因。我很肯定我以前做过这件事。我是否需要卸载该服务并重新安装?
服务器:Windows Server 2003 R2 应用程序.NET版本:2.0 开发:VS 2005 语言VB.NET
OnStart方法:
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.
Me.Timer1.Enabled = True
End Sub
的InitializeComponent: CHECKDB_INTERVAL_TIME = 10
Private Sub InitializeComponent()
Dim iWaitTime As Int16
iWaitTime = CType(ConfigurationManager.AppSettings("CHECKDB_INTERVAL_TIME"), Int16)
Me.components = New System.ComponentModel.Container
Me.Timer1 = New System.Timers.Timer()
Me.Timer1.Interval = iWaitTime * 60000
'
'HarleyCloser
'
Me.ServiceName = "MyService"
End Sub
Friend WithEvents Timer1 As System.Timers.Timer
我发现了这个问题。问题在于使用了一个指令,用于在调试模式和发布模式下执行不同的操作。
答案 0 :(得分:0)
如果你更改了服务exe,你真的应该卸载前一个并安装新的。通常,您需要重新启动才能完成卸载,然后才能安装新的。
答案 1 :(得分:0)
停止服务,更换exe并重新启动它应该没问题,我已多次这样做了。
您在版本之间更改的内容会在OnStart中执行需要很长时间的任务。 OnStart必须在30秒内从头到尾完成。检查OnStart代码是否存在阻塞。
如果您需要调试OnStart here is some tips该怎么做,但30秒限制仍然适用。另一个提示是将一些日志消息放入OnStart,它将向Windows日志中添加消息,显示您的代码已经达到了多远。
答案 2 :(得分:0)
您必须使用“installutil”卸载旧服务,然后再次安装新服务。您可以通过Visual Studio命令提示符使用“installutil”。
作为旁注,如果服务的OnStart方法需要很长时间才能执行,那么您可能希望在OnStart方法中启动一个完成所有工作的计时器。
答案 3 :(得分:0)
您必须使用installutil进行安装和卸载。总是,替换.EXE不是一个好方法。
您还必须检查执行服务的用户。默认情况下,我认为它的本地服务没有很多权限,您可以通过代码或使用服务管理器来设置用户。
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.User; this.serviceProcessInstaller1.Password = ConfigurationSettings.AppSettings [“password”]; this.serviceProcessInstaller1.Username = ConfigurationSettings.AppSettings [“username”];
答案 4 :(得分:0)
我找到了问题。使用Debug Directive在服务中隐藏了一些代码。如果服务是在Debug中编译的,那么它就像一个控制台应用程序一样运行,如果它是在Release中编译的,那么它就作为服务运行。因此,服务在OnStart上超时,因为它试图运行整个控制台应用程序。