新的Windows服务应用程序版本无法启动

时间:2011-08-12 13:24:56

标签: .net windows service

我有一个已经运行的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

我发现了这个问题。问题在于使用了一个指令,用于在调试模式和发布模式下执行不同的操作。

5 个答案:

答案 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上超时,因为它试图运行整个控制台应用程序。