【发布时间】:2011-08-12 13:24:56
【问题描述】:
我有一个正在运行的 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
初始化组件: 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
我发现了问题。问题在于一个指令被用来在调试模式和发布模式下执行不同的操作。
【问题讨论】:
-
事件查看器中有错误消息吗?
-
事件查看器中的应用程序日志说什么?
-
如果事件查看器什么也没说,我发现有用的一件事是在调试时将事件日志条目或消息添加到数据库 - 例如“即将调用 DoSomeWork...”和“DoSomeWork已完成”...等。尤其是在包含可能需要一些时间才能完成的过程的循环中。这确实是我想出的轻松调试服务应用程序的唯一方法。它可以让您查看服务在代码中的哪些位置挂起或花费的时间比预期的要长。
-
既然我已经说过了,我只是想用谷歌搜索如何调试 Windows 服务,当然,微软有一个可能更好的方法:msdn.microsoft.com/en-us/library/7a50syb3(v=VS.80).aspx
-
@David Stratton 我认为在服务管理器终止服务之前,您仍然只有 30 秒的时间来单步执行代码。