我需要的是一种启动远程应用程序的方法,仅此而已。我有一个可以远程正常运行的自动测试运行,但我需要将该应用程序作为部署过程的一部分而不是测试过程来启动。PSExec 启动了该应用程序,但它保持与该过程的连接并且从不释放。这将导致我的部署超时,然后测试运行由于部署失败而失败。我创建了第二个脚本来终止 PSExec 进程,但由于第一个脚本从未完成,因此它从未运行过。当我手动使用这两个脚本时,我可以让整个构建-部署-测试过程在我的干预下运行,但我无法让它们作为部署过程本身的一部分运行。
除了这个问题之外,当部署过程启动脚本时,我还遇到信用、版本信息和版权信息被视为无效命令的问题,这导致部署过程失败。
有没有更简单的工具,除了远程启动应用程序外什么都不做?如果没有,有没有办法在不破坏 PSExec 文件的情况下删除积分等,以及是否有其他方法可以关闭 PSExec 进程?
答案1
我不太清楚你所说的“它保持与进程的连接并且永不释放”是什么意思,但是,如何使用 PSExec 来做类似的事情
psexec \\computer -d -s "%systemroot%\system32\cmd.exe /c c:\someprogram.exe"
-d 开关的定义是“不等待应用程序终止。-s 开关表示以本地系统身份运行。将 /c 开关与 cmd.exe 一起使用意味着在命令完成后退出 cmd.exe,而不是让 shell 保持打开状态。
答案2
PSExec 在从同一台计算机向同一台计算机发出多个调用时会出现问题。假设您的计算机名称为“Alpha”,服务器名称为“Tango”,从“Alpha”向“Tango”发出 3 个并行 PSExec 将导致此问题。如果我没记错的话,PSExec 使用了 NamePipes,这会导致此问题。
如果进程挂起,请转到您发出 PSExec 的服务器(“Tango”),打开服务并查找“psexesvc”并将其停止。您可以使用命令行“net stop”甚至“sc”(如果需要)。
现在来谈谈解决方案 - 我建议您使用 WinRS 和 WinRM 而不是 PSExec。它速度更快、更稳定,并且允许并发连接。
我希望这会有所帮助,伊丹。