解决了问题,请参阅帖子的底部。
所以我有一个简单的Windows服务,它可以监视一个特定的文件夹,并使用Web服务将进入它的文件加载到服务器。
使用Windows 7在我的机器上正常工作但是当我尝试在Windows Server 2003上启动它时,我收到一个错误:错误1053:服务没有及时响应启动或控制请求。但是我在几秒钟之后收到了这条消息。
我创建了ServicesPipeTimeout并将其设置为60000毫秒。
我尝试使用sc查询命令从命令行运行它,发现WIN32_EXIT_CODE为0,我认为这意味着该服务甚至没有尝试启动,因为它在启动之前发现错误。
在事件查看器中,我收到错误7000和7009。 我是Windows服务器上的管理员。 我唯一没试过的是从微软发现的修补程序,但是我不想使用它,因为据我所知,它适用于服务实际超时的时候.http://support.microsoft.com/ KB / 886695
我已经尝试过我能想到的一切,有什么我想念的吗?
吉斯利
编辑:重新安装.NET框架,现在我收到一个新错误,说无法找到服务控制器。
编辑:我使用安装项目设置服务,而不是使用installutil命令。这是因为我需要在安装过程中获取用户输入并将其保存在注册表中。
编辑:我已经安装了.NET 4.0框架,但不可能安装该服务。除了我上面写的内容,我还尝试过: 重新启动。 重新安装。 我试图更改服务需要访问的文件的权限。 在注册表编辑器中更改权限。 编辑了代码,以便onStart函数只启动一个线程。
我认为这是某种权限问题,但我没有太多处理Windows服务器的经验。
解决方案: 原来这是两个单独的问题。必须修复.NET框架,我必须删除启动服务时的try / catch子句。由于某些原因(我不知道),try catch块做了一些事情,使得无法在Windows Server 2003中启动该服务,但它在Windows 7上运行良好。
知道这是为什么会非常有趣。
感谢您的帮助。
Gísli
答案 0 :(得分:1)
您是否在Server 2003 PC上安装了正确版本的.NET Framework? Windows 7上的标准配置需要在较旧的操作系统上手动安装。
你说“我已经尝试了我能想到的一切”。请编辑问题以显示您已经尝试过的内容,这样我们就不会建议您已经完成的任务。
编辑: 另请尝试Fusion Log viewer。将其设置为记录失败,然后启动您的服务。点击刷新,然后查看是否记录了任何错误。双击一行以获取更多详细信息。
答案 1 :(得分:0)
我猜你用.NET 2.0安装了.NET 3.5服务? InstallUtil将起作用,因为CLR是相同的,但由于.NET 3.5依赖性,服务无法启动。
答案 2 :(得分:0)
在OnStart
代码中,您可以将所有内容包装在try-catch
块中,并使用以下内容将异常消息和堆栈跟踪写入文件:
File.WriteAllText(@"C:\Temp\MyServiceLog.txt", exp.Message + exp.StackTrace);
这将帮助您分析问题。此外,我正在使用一种非常简单的方式来调试我的服务:如果会话是交互式的,我将它们包装在WinForms包装器中。为此,我需要以下内容:
DoStart
和DoStop
,这些方法是公开的并调用受保护的OnStart
和OnStop
方法OnLoad
和OnClose
处理程序中的新代码,因此相应调用服务实例的DoStart
和DoStop
方法然后,我将以下代码添加到Main
中的Program.cs
方法:
if (Environment.UserInteractive)
{
Application.Run(new FormServiceHoster());
}
else
{
// ... old code to create service instance.
}
这样,当您在Visual Studio中点击F5或双击资源管理器中的EXE时,您将“服务”作为应用程序运行。当服务实际作为服务运行时,将忽略表单代码。
通常,您可以通过附加到进程来调试服务,但这不适用于调试启动和停止代码。此方法有助于大量调试服务启动和停止代码。
您需要手动添加对System.Windows.Forms
和System.Drawing
的引用。
答案 3 :(得分:0)
我敢打赌你希望你曾经使用过像log4net这样的日志包,这可能有助于说明你的程序有多远。
OnStart事件中的代码实际上可能比预期花费的时间更长。如果是这样,您可以将该代码移动到一个线程,以便在您的线程继续工作时OnStart事件完成(因此Windows认为该服务已启动)。
您是否以管理员身份运行该服务?如果是这样,那通常会排除权限问题。 (如果它仍然出错,它将排除KB 886695问题,因为它似乎只适用于本地系统)。
由于您使用的是.NET 4.0,您确定是安装完整版本而不是客户端配置文件,还是您的应用程序使用客户端配置文件?