【问题标题】:How to run a command-line program on a remote server如何在远程服务器上运行命令行程序
【发布时间】:2010-07-26 15:54:30
【问题描述】:
我编写了一个在命令行上运行的工具。
我可以在我的机器上的命令行上测试它,它工作正常。
然后我远程进入目标服务器机器并在那里的命令行上运行它,它仍然可以工作。
但是...这个工具需要保持运行(它监控工具)。
我不能让我的远程会话打开太久,因为其他人需要使用它,当我关闭远程会话时,该命令行工具结束。
我不知道如何,也想避免需要,编写一个 Windows 服务,但本质上我需要这种能力。我几乎需要用一个 Windows 服务来包装我的命令行工具,该服务可以在我断开连接时在目标机器上保持运行。
谁能提供有关如何做到这一点的任何见解/策略?
编辑:
以下两篇文章都很有帮助。
【问题讨论】:
标签:
c#
.net
command-line
windows-services
【解决方案1】:
如果是 Windows Server 2003 或更早版本,您可以使用 Srvany.exe 将任何应用程序作为服务运行。详情请见here。
如果是 Windows Server 2008,官方不支持 SrvAny,但您可以通过从 Win2003 Resource Kit 或更早版本复制它,然后以某种方式将其与 Thomas answer 中的说明结合来破解它。
然而,编写一个合适的 Windows 服务真的很简单,这是确保它与其他一切顺利共存的最佳方式。
只需在 Visual Studio 中创建一个 Windows 服务项目。在 OnStart 中,您创建一个运行您的代码的线程。在 OnStop 中,您使用一个标志来停止服务。然后你可以在以后做得更好。
【解决方案3】:
另一种解决方案是使用PsExec 在远程计算机上以分离模式启动您的监控工具,即:
PsExec.exe \\remote_machine -d C:\...\monitoring_tool.exe
PsExec.exe 在远程计算机上启动 monitoring_tool.exe,然后自行终止。它不会等待monitoring_tool.exe 终止。