我有一个现有的GUI应用程序,本应该实现为一个服务。基本上,我需要能够远程登录和注销Windows 2003服务器,同时仍然保持此程序运行。
这是否可能?
编辑:进一步说明......我没有源代码,这不是我的应用程序。
我有一个现有的GUI应用程序,本应该实现为一个服务。基本上,我需要能够远程登录和注销Windows 2003服务器,同时仍然保持此程序运行。
这是否可能?
编辑:进一步说明......我没有源代码,这不是我的应用程序。
Windows服务不能拥有GUI界面,因此您需要摆脱GUI界面或将应用程序分成两个部分 - 一个没有UI的服务和一个“控制器”应用程序。如果您有源代码,则将非GUI代码转换为服务很容易-Visual Studio有一个“Windows Service”项目类型,可以为您处理包装,并有一个简单的演示向导,向您展示如何创建一个部署项目来处理安装。
如果选择第二种路线并需要将一些原始GUI代码放入控制器中,则控制器和服务可以通过WCF、.NET Remoting或使用您自己定义的协议的普通套接字连接进行通信。如果使用Remoting,请确保使用传输数据调用最少方法的“厚重”接口-每个调用都有相当大的开销。
如果UI相当简单,则可以使用配置文件作为输入和日志文件或Windows事件日志作为输出。
有没有人使用过像这样的第三方产品:Always Up?
似乎能够满足我的需求。我需要它能够在登录/注销循环中持续运行,以及无视它是GUI应用程序并仍然运行。
他们必须手动链接到exe并调用WinMain或其他方法。
你是否真的需要它作为一个服务来运行,还是只需要在你没有连接时保持运行?如果是后者,你可以断开连接而不是注销,在选择“关闭”后,选项应该在下拉列表中,或者你可以调用 tsdiscon.exe。
您可以使用ServiceMill来实现此操作。 基本上,您需要在服务器上安装ServiceMill Server。 然后,在可执行文件上单击右键并选择“安装为ServiceMill服务”。 接下来,您需要配置一些内容(用户/密码,是否要与桌面交互或者您更喜欢隐藏UI...并将启动模式设置为自动)。
Active+ Software的另一个工具ServiceMill Exe Builder也可以解决问题,它允许您从命令行创建服务。如果您正在使用持续集成服务器或计划将组件作为服务分发而无需考虑服务集成(而且它是免版税的),那么这非常棒。
你有源代码吗?在许多情况下,独立应用程序和服务之间的区别很小。
大部分变化与正确地将代码钩入服务管理器有关。完成后,您将知道任何出现的问题都是由于您的编程而不是其他任何程序引起的。