运行Windows窗体应用程序。从服务

时间:2010-04-08 08:12:39

标签: c# windows-services winforms

我有一个奇怪的应用程序用于开发和测试我需要一个Windows窗体应用程序,以便我可以监视它在做什么。对于生产,应用程序将从服务启动,不需要可见的UI。我真的不想重写应用程序。一旦它完成到一个控制台应用程序,所以我想保留它,但从服务启动它。

我的问题是这个应用程序在服务中运行良好吗?目前它有UI元素,我已经能够使用Process类(System.Diagnostics)从服务成功启动应用程序。

这种方法有什么问题吗?

5 个答案:

答案 0 :(得分:2)

使用配置管理器为您的应用程序创建gui构建和服务构建,然后使用以下结构来控制应用程序的启动方式:

#ifdef GUI
  // load gui
#else
  // run as service
#endif

答案 1 :(得分:1)

我认为通常这样做的方式是拥有一个单独的GUI应用程序,以某种方式与服务进行通信。

答案 2 :(得分:1)

我认为没有问题。

如果应用程序是控制台应用程序,则您可以仅使用配置控制可见性。现在,您需要使用另一个应用程序(Winform)来执行相同的操作。

答案 3 :(得分:0)

如果您的逻辑位于一个单独的库中,并且您的GUI应用程序只是调用它,那么同样的控制台应用程序执行相同操作也应该是微不足道的。你只在一个地方改变你的逻辑,并有两个前端......

答案 4 :(得分:0)

您需要调整注册表Type注册表位置中SYSTEM\CurrentControlSet\Services\YourServiceName字段的值。请参阅this article

正如旁注;服务并不意味着像那样工作 - 它们完全是在后台。

最好是公开某种外部控制API,例如可能通过网络套接字。然后,您可以在系统托盘或Hide模式下运行单独的Windows窗体应用程序,并在每次从服务接收内容时弹出。