关于用户界面:如何在上作为服务运行Windows GUI应用程序?

关于用户界面:如何在上作为服务运行Windows GUI应用程序?

How can I run a Windows GUI application on as a service?

我有一个现有的GUI应用程序,应该作为服务实现。基本上,我需要能够远程登录和注销Windows2003服务器,并保持这个程序的运行。

这是可能的吗?

编辑:在此进一步细化…我没有源,这不是我的应用程序。


Windows服务不能有gui,因此您需要去掉gui或将应用程序分成两部分-一个没有ui的服务和一个"控制器"应用程序。如果您有源代码,将非GUI代码转换为服务很容易——Visual Studio有一个"Windows服务"项目类型,它负责为您进行包装,还有一个简单的演练,演示如何创建一个将负责安装的部署项目。

如果您选择第二个路由,并且需要将一些原始的GUI代码放入控制器,则控制器和服务可以通过WCF,.NET远程处理或纯套接字连接与您定义的协议进行通信。如果您使用远程处理,请确保使用一个"厚重"的接口来传输尽可能少的方法调用数据-每个调用都有相当多的开销。

如果用户界面相当简单,那么您可以不必使用配置文件作为输入和日志文件,也可以使用Windows事件日志作为输出。


是否有人使用过第三方产品,如:始终向上?

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

他们必须手动链接到exe并调用winmain或其他东西。


您可以将它包装成srvany,尽管您可能需要为它分配一个实际的用户帐户(与localservice或某些类似的帐户不同)。


我对温斯有很好的经验。我可以很容易地将批处理文件转换为使用它的服务。

根据这个答案,我也把它用于nginx。


你真的需要它作为一个服务运行吗,或者你只是需要它在你没有连接的时候保持运行吗?如果是后者,您可以断开连接而不是注销,应用程序将继续运行。选择关机后,该选项应在下拉列表中,或者您可以调用tsdiscon.exe。


FireDaemonPro将大多数图形用户界面应用程序转变为服务;这不是免费的,但可能值得一试。


您可以使用Servicemill来完成此操作。基本上,您在服务器上安装ServiceMill服务器。然后单击可执行文件上的右键,然后单击"作为服务安装"。接下来,您将配置一些东西(用户/密码,如果您想与桌面交互,或者如果您想隐藏UI…并将启动模式设置为自动)。

另一个来自active+软件的工具可以是一个解决方案servicemill exe builder,它允许您从命令行创建服务,如果您使用持续集成服务器,或者如果您计划将组件作为服务分发,而不必考虑服务集成(加上它是免版税的)。


如果创建一个服务会发生什么。该服务配置为与桌面交互。将其配置为运行某个用户并自动启动。来自此其他应用程序上的服务CreateProcess。我猜这很快就可以用C(C/C + +)代码,如果我记得的话,即使是一个服务也有很多代码。这样行吗??

但是!

我的第一个想法是在服务器类虚拟主机(如虚拟服务器、虚拟机、vmware)中创建虚拟计算机。这些虚拟机将作为服务运行(或者无论HyperV做什么)。虚拟机将始终在运行-无论是登录还是注销。

让这个虚拟计算机自动登录到Windows(TweakUI可以设置它),然后使用启动文件夹的快捷方式启动GUI应用程序。你甚至可以使用程序的图形用户界面(我敢打赌永远都不能做到这一点)。


一个服务不应该有一个GUI,因为它应该在不需要任何用户干预的情况下运行,并且在查找和与正确的用户桌面通信时存在各种各样的问题。

因为,可能要求这样做的原因是能够远程监控应用程序,所以实现这一点的方法是拥有两个应用程序。服务端(基本上写为控制台应用程序)和客户机/监控GUI端。服务将使用一些远程连接(当我这样做时,我使用命名管道)与客户机/监控应用程序通信。任何一个都应该能够在没有另一个的情况下运行,当然,服务应该能够在没有客户机的情况下运行。


首先,我必须问一下为什么您的服务需要用户界面。很可能不是,但您可能需要一个从该服务获取数据的客户机。服务通常没有GUI的原因是它们可能没有运行的窗口环境。服务可以在没有用户登录到计算机的情况下启动和运行。在这种情况下,没有桌面可供服务GUI运行。

已经说过,可以根据马克的建议,将服务的属性设置为以用户身份运行。您还可以在服务的属性中指定"允许服务与桌面交互"。只有当您知道某个用户将登录时才执行此操作。


你有消息来源吗?在许多情况下,独立应用程序和服务之间的差异是最小的。

大多数更改都与正确地将代码挂接到服务管理器有关。一旦完成,您将知道发生的任何问题都是您的编程的结果,而不是任何其他程序的结果。


推荐阅读

    linux中启动服务命令?

    linux中启动服务命令?,服务,系统,命令,信息,工作,设备,网络,标准,名称,密码,l

    linux运行vim命令?

    linux运行vim命令?,系统,工具,官方网站,模式,基础,数据,代码,环境,入口,命令

    linux服务器保存命令?

    linux服务器保存命令?,时间,状态,档案,电脑,命令,信息,位置,编辑,文件,模式,L

    linux服务器扫盘命令?

    linux服务器扫盘命令?,地址,工作,命令,目录,数据,单位,名称,系统,管理,信息,L

    linux自动运行命令?

    linux自动运行命令?,服务,系统,时间,代码,周期性,第一,命令,管理,在线,状态,l

    linux开启运行命令?

    linux开启运行命令?,系统,服务,工作,管理,状态,命令,标准,情况,环境,工具,lin

    linux运行wps命令?

    linux运行wps命令?,软件,官网,名称,时间,电脑,系统,工具,环境,项目,数据,wps

    linux服务器搭建命令?

    linux服务器搭建命令?,系统,服务,软件,地址,平台,在线,密码,工具,环境,百度,l

    linux运行cmd命令?

    linux运行cmd命令?,电脑,系统,状态,情况,环境,命令,单位,管理,设备,数据,电脑

    服务器重启命令linux?

    服务器重启命令linux?,工作,标准,设备,服务,系统,名称,命令,百度,网络,密码,

    linux服务端常用命令?

    linux服务端常用命令?,工作,地址,系统,网络,基础,命令,标准,工具,信息,管理,l

    linux运行两个命令?

    linux运行两个命令?,网络,地址,系统,工作,暂停,命令,网站,密码,网上,入口,Lin

    linux禁用服务命令行?

    linux禁用服务命令行?,服务,系统,软件,管理,工具,信息,状态,平台,连续,技术,l

    linux停服务常用命令?

    linux停服务常用命令?,地址,工作,系统,命令,服务,信息,标准,管理,代码,进程,l

    linux系统中注销命令?

    linux系统中注销命令?,系统,地址,工作,密码,管理,命令,信息,目录,文件,控制

    linux服务器删除命令?

    linux服务器删除命令?,系统,服务,管理,情况,命令,工作,互动,地址,软件,较大,l

    linux命令运行代码?

    linux命令运行代码?,代码,单位,系统,环境,连续,保险,工具,命令,文件,音乐,Lin

    linux注销的命令是?

    linux注销的命令是?,工作,地址,管理,密码,系统,命令,目录,信息,网络,设备,lin

    linux开启服务命令?

    linux开启服务命令?,服务,标准,设备,工作,网络,系统,密码,命令,服务器,终端,

    linux服务器负荷命令?

    linux服务器负荷命令?,信息,电脑,中科,环境,工具,系统,平均,检测,情况,状态,l