1

如果这是一个愚蠢的问题,请原谅我,我对编写服务还很陌生。我编写了一个运行计时器的服务,计时器代码运行一些检查以确保我们的系统正常运行。它是用VB.Net 框架 1.1编写的。然后我使用“sc create”安装服务。该服务在我正在开发的XP Pro 机器上运行良好。但是,当我在 64 位 Windows 2003 服务器上安装该服务时,该服务失败并显示error 1053立即地。我在 OnStart 函数的第一行代码中进行了一些调试以写入文本文件,但即使这样也没有运行,因此程序启动时一定有问题。最后,我绝望地在 Visual Studio 2003 的一个新 VB 项目中创建了一个全新的 Windows 服务,并编译了一个空服务,该服务仅在 OnStart 函数中声明和设置字符串变量的值,如下所示:

Dim strTmp As String
strTmp = "hello"

即使在W2K3 服务器上也失败了,但在 XP 开发机器上工作正常。服务器已安装并运行 .Net Framework 1.1,我们在 CMS 中使用它(用 ASP.Net 1.1 编写)。该服务作为本地系统帐户运行。我尝试启用与桌面的交互,但这没有帮助。我运行了进程监视器并且没有拒绝访问事件。我清空了应用程序事件日志,仍然不起作用。日志中没有其他事件可以帮助我。绝对使用应用程序的发布版本。对 exe 文件的权限由系统和管理员完全控制。有什么想法吗?这一定很简单,但如果我能弄清楚,我该死的!提前致谢。

@DavidHi,非常感谢您的建议。我不认为第一点是我的问题,部分原因是 MS 文章是关于停止或暂停服务,我的启动失败;也是因为服务没有超时,没有30秒的等待,立即失败。其次,当您说向服务启动添加异常处理程序时,您是指 OnStart 子吗?我尝试在那里添加一个调试文件写入,但我会尝试添加一个事件日志。关于系统检查,不可能是因为我创建的全新空测试服务显示了相同的行为并且根本没有做任何事情。你最后一点可能是关键。我的开发环境是32bit. 我会对 corflags 做一些研究,或者我可以构建一个 64 位开发环境。再次感谢您,至少您给了我一些新的思考!

好的,找到了解决方法。我把我的 exe 文件放在System32. 当我将它放在我自己创建的另一个文件夹中时,服务运行了,尽管时间很短。然后我不得不将 ini 文件和它读取/写入的日志文件也移动到该文件夹​​,而不是 System32,并且一切似乎都运行良好。天知道为什么它不喜欢从 System32 运行,但至少它现在可以工作了!谢谢你们的帮助。

4

2 回答 2

0

1053 错误是与服务控制管理器等待服务响应您的启动请求相关的超时。有一篇知识库文章提到了与基于 Framework 1.1 的服务特别相关的托管服务停止请求问题,因此它没有准确描述您的问题,但它可能与您的情况相关。该链接供您参考。

http://support.microsoft.com/kb/839174

我要进一步诊断问题的另一个建议是确定 Start 是否由于服务的启动代码中发生“隐藏”异常而失败;start 调用不会看到异常,并且可能会让您认为它只是超时。

我建议您在服务启动中添加一个异常处理程序,该处理程序仅在事件日志中记录一条消息,其中包含异常的详细信息(如果捕获到异常)。这至少会让您知道服务中出现了问题,并为您提供比现在更多的信息。

最后一个想法:该服务是否通过网络连接检查您描述的系统?如果是这样,LocalSystem 将没有足够的权限来执行网络访问。

祝你好运!

编辑另一种可能性:

您的开发环境/可执行文件是 32 位的吗?您提到您的服务器是 64 位的,因此您可能需要使用强制执行 32 位操作的“corflags”工具

corflags /32bit+ YourServiceExectubable.exe

此信息的来源是以下 SO 帖子: 64 位环境中的 32 位 Windows 服务

**不幸的是,似乎 corflags 仅适用于 2.0 程序集,并且专为此类问题而设计。**

于 2012-09-19T14:21:45.100 回答
0

这看起来与此问题非常相似,可能会帮助您: Starting a windows service failed with error 1053

需要注意的其他几件事:

  • 确保您的已部署服务中没有以下任一语句:

    System.Diagnostics.Debugger.Launch

    System.Diagnostics.Debugger.Break

  • 您可能需要使用本地系统以外的帐户运行服务(取决于您的服务所需的权限)。

于 2012-09-19T14:25:53.293 回答