我有好多根据一些桌面程序改编的自动化程序,一直运行Windows服务器上。程序太大了,而且是Win32的C++写的,要转换成服务程序需要花很大工夫。终于发现了有个叫做srvany的程序,是Windows Resource Kit的一部分,能把程序简单地转换服务运行。步骤如下:
必须用管理员执行
1,安装好Windows Resource Kit(据说Windows server 2008不在支持中,不过试了后没有问题)
安装路径 C:\ResourceKit
2,运行 C:\ResourceKit\INSTSRV.EXE MyService C:\ResourceKit\SRVANY.EXE
3,运行 regedit
找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService
新建一个Key 叫 Parameters
在Parameters中
新建一个Value AppDirectory 指向应用程序的目录
新建一个Value Application 指向应用程序
新建一个Value AppParameters 列出运行参数
执行,没有问题。在公司规定的会话时效终结之后,可以看到程序仍然正常活着。
其实根据资料,Windows server 2008只是把Session 0给隐藏起来了,即使在RDP中使用-admin也只是连接到普通远程会话。在普通远程会话中通过下列命令可以连接到0会话:
rundll32.exe winsta.dll,WinStationSwitchToServicesSession
但是这个命令好象没有什么用。因为如果0会话只有在发现有交互式服务时才会显示,显示的只是服务程序的窗口,没有系统桌面。
有一个非常tricky的方式可以让远程会话在连接终止后不被杀死。在用远程桌面登录后,打开命令行,执行以下命令:
query session
打印出当前所有会话,找到自己的会话id, 譬如说是2,然后执行:
tscon 2 /dest:console
据说此命令可以把当前会话转向到console上,就不会被杀死了.试验了一下有效果.
转载于:https://blog.51cto.com/bluefeather/1657612