需要通过隐形WinForm应用程序替换Windows服务的建议

时间:2011-01-27 05:44:48

标签: windows winforms windows-services background-application

我需要一个后台应用程序来支持我的客户端应用程序,无论主客户端应用程序是否正在运行,它都应始终在客户端计算机上运行。

Windows Service是我的第一选择,但我遇到的Windows服务问题是:通过主客户端应用程序轻松控制Windows服务,向Windows服务发布和安装补丁,以及Windows服务无法运行时进行故障排除。

所以,我开始考虑Windows服务的替代品,发现没有可见表单的Windows窗体应用程序可以为我做。这个不可见的应用程序应该从系统启动开始并始终保持运行,完成Windows服务所做的所有工作。但在我深入研究开发之前,我想探索这种方法的优缺点。

对此方法有何建议/意见?

2 个答案:

答案 0 :(得分:1)

您的要求更适合Windows服务。 Windows服务的主要优点是,只要系统启动,它就会立即启动,无论是否有人登录系统。

要解决部署问题,可以将业务逻辑构建到单独的程序集中,并使用Windows服务调用必要的功能。这样您就可以只部署修改后的程序集。

具有隐形表单的Winform应用程序无法满足此目的。 HTH

答案 1 :(得分:1)

那是不可能的。用户模式应用程序必须由用户启动,并且在该用户注销时不会继续运行。这就是SessionEnding事件的目的:允许您在用户注销或计算机关闭时正常关闭应用程序。你不能只是在系统启动时启动并始终保持运行。

您需要Windows服务。但您应该知道,在Windows Vista及更高版本中,服务无法直接与用户交互。它们在单独的进程中运行,并且不能显示自己的UI。从问题中确切地知道您的需求是什么并不清楚,但这是Windows服务的一个重要限制,值得考虑。一个合适的设计确实不应该要求这样,但显然有很多人对这种新的,更安全的行为感到惊讶。我会在this questionthis other question的相关答案中更详细地解释这一点。