如何在服务上运行Windows GUI应用程序?

Jef*_*ffV 31 windows legacy user-interface windows-services

我有一个应该已作为服务实现的现有GUI应用程序.基本上,我需要能够远程登录和退出Windows 2003服务器,并仍然保持此程序运行.

这甚至可能吗?

编辑:这里进一步细化...我没有源,它不是我的应用程序.

McK*_*eG1 17

Windows服务不能有GUI,因此您需要摆脱GUI或将应用程序分成两部分 - 一个没有UI的服务和一个"控制器"应用程序.如果你的源代码,非GUI代码转换为服务很容易 - Visual Studio中有一个"Windows服务"的项目类型负责包装的对你,有一个简单的演练,展示了如何创建一个负责安装的部署项目.

如果您选择了第二条路线,需要把一些原来的GUI代码到控制器,控制器和服务可以与你自己定义的协议通过WCF,.NET远程处理或纯套接字连接进行通信.如果您使用远程处理,请务必使用"粗略"接口,该接口使用尽可能少的方法调用来传输数据 - 每次调用都有相当大的开销.

如果UI非常简单,您可以使用输入和日志文件的配置文件或输出的Windows事件日志.

  • @labilbe - Windows服务绝对有可能产生具有GUI的进程.这可能是打印机服务正在做的事情.这与具有GUI的服务进程本身不同.同样,Windows操作系统的某些部分有时可以执行其他方式不允许的操作. (3认同)
  • 错了 Windows服务可以具有GUI。打印机服务就是这种情况,它能够显示一个窗口。 (2认同)

Jef*_*ffV 7

有没有人使用过第三方产品:Always Up

似乎做我需要的.它能够持续运行我需要的登录/注销周期.并且能够忽略它是一个GUI应用程序并运行它无论如何.

它们必须手动链接到exe并调用WinMain或其他东西.


Mar*_*ett 5

您可以将其包装到srvany中,尽管您可能需要为其分配一个实际的用户帐户(而不是 LocalService 或类似的帐户)