C#中的Windows服务适用于开发机器,在测试环境中崩溃

时间:2010-11-01 20:52:06

标签: c# service

我一直在Visual Studio 2010 Express中使用.NET 4和c#开发应用程序。它的目的是观察目录并将它找到的任何文件导入我们的成像系统。

我包含了一个安装程序类,它提供了installutil.exe所需的信息。

因此,要在本地安装,我构建解决方案,然后在命令行:

installutil.exe MyProjectExecutable.exe

将其安装为服务。这在我的开发环境中运行良好。

要部署到测试环境,我使用相同的方法:

installutil.exe MyProjectExecutable.exe.deploy

当然,可执行文件有第二个扩展名.deploy。这是Visual Studio发布应用程序的方式。一切都在他的观点上起作用

问题出在这里:一旦我完成了这项工作,我就会运行服务并正常启动,如日志文件中所示。但是,一旦它检测到目录中的文件,该服务将不会对它们执行任何操作,并最终会崩溃。我可以告诉它崩溃的唯一方法是查看Windows事件查看器。它将显示消息:

“MyProjectExecutable.exe.deploy [4108]中发生未处理的win32异常。即时调试此异常失败,并显示以下错误:无法启动调试器,因为没有用户登录。”

两个问题:

1)可能导致此问题的原因

2)我是否正在通过正确的步骤来安装Windows服务,或者有更好的方法吗?

两个环境都安装了.NET 4。 在这两种环境中,我将相同的文档放在导入目录中。 在这两种环境中,服务都在本地系统帐户下运行。 如果我的问题反映出缺乏C#经验,我提前道歉。

4 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您是否正在观看“文档和设置”下的目录?您提到您在本地系统下运行,但是在C#代码中还是在服务面板中?

  • 开始 - >运行
  • SERVICES.MSC
  • <找到您的应用>
  • 右键单击“属性”
  • 登录标签
  • 登录为
    • 此帐户
    • <使用权限>
    • 插入用户/通行证

答案 2 :(得分:0)

根据我的经验,这始终是一个安全问题。检查运行用户的服务的权限。它可以访问您正在监控的文件夹并进行必要的更改吗?

答案 3 :(得分:0)

我发现了这个问题。在配置文件中,listen目录是“c”,而它应该是“C”。到目前为止,我并不认为Windows是区分大小写的。谢谢你的帮助。