2013-02-25 122 views
4

我在C#中有一个桌面应用程序,并且我想让这个窗口服务。是否有可能将该应用程序作为Windows服务?基本上我想要一个应用程序,在需要时显示gui,并最小化它去系统尝试,它也应该出现在服务...对于应用程序只是一个例子,我的应用程序有一个计时器和多行文本字段,它也与数据库及其从数据库中显示及时状态,所以当我需要看到它时,我可以从系统尝试启动GUI?使C#窗口应用程序作为窗口服务

任何形式的帮助都会被高度评价。谢谢!

+0

我有一个应用程序,我想这样做,但它已经很复杂,我还没有得到它。这不是微不足道的,正如下面的答案所示。 – Bobson 2013-02-25 15:15:05

+0

我也有遗留项目的问题,对于更复杂的项目,现在我正在使用Service O-Matic,它不是免费的,但它可以完成这项工作。还有一些免费的产品,例如restartOnCrash,它并没有为我完成这项工作 – 2013-02-25 15:18:57

回答

3

您需要分开你的应用程序。 Windows服务和桌面。您将需要在Windows服务中创建API挂钩,以允许来自桌面应用程序和服务的通信。我会为此推荐WCF。

简而言之,Windows服务不应该与桌面交互。它将在与登录的会话不同的会话中运行,即使您是以服务运行的相同帐户登录的。

+1

对!在Windows服务常见问题解答中查找[GUI服务](http://www.coretechnologies.com/WindowsServices/FAQ.html#GUIServices)上的其他详细信息 – CoreTech 2013-02-25 16:01:24

+0

有趣的是,我之前没有处理过交互式服务检测。我仍然不会使用它,因为这只是用户混淆的另一点。我会修改我的陈述,不能不应该......从技术上讲,它可以,但仅仅因为你可以,并不意味着你应该。 – TimWagaman 2013-02-25 17:13:15

1

无法在Windows服务中显示GUI。 你可以做什么是:

a。从服务器逻辑分离客户端逻辑,windows服务将执行服务器端操作,并将WCF API公开给客户端,这将处理与GUI相关的问题。

b。使用像Service-O-Matic这样的外部工具来控制您的Winforms应用程序,就好像它是一个Windows服务一样。见:

http://www.kwakkelflap.com/service.html

+0

另外请注意,UI定时器不能在Windows服务上运行,任何尝试在服务中显示GUI都会导致异常。 – 2013-02-25 15:04:30