我可以开发一个Windows服务,可以是Windows服务和(<any type =“”>)应用程序吗?</any>

时间:2010-12-24 09:37:09

标签: c# .net windows-services

假设我想创建一个Windows服务,但是我想调试它,(可能还有其他原因......) 我想创建一个可以构建为Windows服务或应用程序的应用程序。 我该怎么做?


您是否可以通过在服务帮助应用程序中构建服务的功能来实现这一点,例如serviceHelper并实现启动和停止方法以及您需要的任何内容?你能创建一个非常小的Windows服务,你需要通过调用刚刚创建的serviceHelper中的方法实现启动和停止等等吗?这样就可以使用serviceHelper来调试你的服务了吗?

这是否正常,除了你应该考虑到你无法调试projectInstaller的问题? (serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic)(serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalService)

3 个答案:

答案 0 :(得分:6)

如果您使用标准服务样板,但随后编辑Main(),则:

  • 检查if(Environment.UserInteractive)
  • 检查命令行参数,例如“-console”开关

并更改代码直接运行代码 而不是运行标准服务启动代码,它应该可以正常工作。

有关完整示例(包括自行安装/卸载),请参阅我的回答here

最大的问题是允许您的调试在不同的安全上下文(交互式用户)而不是服务帐户中运行。

答案 1 :(得分:1)

我们在服务应用程序中使用Marc Gravell描述的命令行技术,所以一定要试一试。

请注意,您将能够轻松调试在Windows XP和2003上作为真正服务运行的应用程序,您可以在其中以交互方式登录会话0并将调试程序附加到正在运行的服务应用程序。在Windows Vista中引入的"Session 0 isolation"使得很难与/调试服务应用程序进行交互,因此我们最终在XP上进行了第一轮测试和调试。

祝你好运。

答案 2 :(得分:0)

当你谈到建立一个“帮助应用程序”时,你正走在正确的轨道上。您可以将应用程序的所有实际逻辑构建到类库(dll)项目中,然后编写一个只调用库的Windows服务。

然后您可以编写其他应用程序,例如控制台应用程序或引用您的类库的单元测试。

这样你就可以编写你想要的任何前端应用程序,它只是与类库的接口。这也是你进行单元测试的方法,它可以让你测试大部分功能,甚至没有真正运行应用程序......但这确实是一个更大的话题。 :)