从 RPC 执行时,Windows START 命令无法运行

Posted

技术标签:

【中文标题】从 RPC 执行时,Windows START 命令无法运行【英文标题】:Windows START command failing to run when executed from RPC 【发布时间】:2013-05-10 18:15:50 【问题描述】:

长话短说,我编写了一个程序,允许我在 Windows 机器上远程安装软件和运行命令。我一直在使用 START 命令(我从 *** 上的另一篇文章中了解到 here)通过 RPC 执行批处理文件,这样我的服务器就不必等待安装完成。它在我写这篇文章的学区的 1000 台计算机中的大多数上都可以正常工作,但是我有几台计算机 START 不运行批处理文件。我没有收到任何错误消息,并且我所做的所有搜索只找到了更多关于如何使用 START 命令的示例。我找不到任何对它的引用,只是没有运行。

我的服务器是 linux 并且正在使用 winexe 进行 RPC。这是我正在运行的命令。

winexe -W domain -U adminUser --password=adminPassword //compName.domain.internal --runas=domain\\adminUser%adminPassword "\\\\Server\\PathToBatch\\run.cmd \\\\Server\\PathToBatch\\install.cmd"

run.cmd 代码如下。

START %1
exit

install.cmd 批处理文件是由我的程序根据他们要安装的内容生成的。命令中多余的 \s 是转义字符,因为 \ 是 linux 中的转义字符。

我得到的输出是。

C:\WINDOWS\system32>start \\Server\PathToBatch\install.cmd 
C:\WINDOWS\system32>exit

没有错误消息,并且在正确启动的计算机上的输出是相同的。

我已经尝试在机器上的命令提示符下运行命令,就像它通过 RPC 运行一样,它工作正常。我可以使用 RPC 自行运行 install.cmd,它工作正常,除了我必须等待安装完成。完全相同的批处理文件可以在其他计算机上运行而不会出现问题。

在工作的计算机上观看任务管理器我可以看到 adminUser 启动运行的 cmd 进程,然后启动第二个 cmd 进程,第一个消失了。在非工作计算机上,它会启动第一个 cmd 进程,然后在没有启动第二个 cmd 进程的情况下消失。

我无法找到工作计算机和非工作计算机之间的任何区别。计算机上没有防火墙。

我们将在暑假期间对这些计算机进行重新成像,我预计它们可能会在那之后开始工作,所以我并不急于解决这个问题。我主要想知道它为什么不工作,这样我就可以防止它将来在其他机器上失败。

提前感谢您能给我的任何帮助。

【问题讨论】:

【参考方案1】:

尝试start "" %1 而不是start %1。还要仔细检查 runas 用户是否可以在命令失败的机器上实际访问\\Server\PathToBatch

【讨论】:

我用 start "" %1 试了一下,效果完全一样。 \\Server\PathToBatch 是只读共享,不需要用户登录。我已经测试了没有启动命令的运行,并且确实有效。添加“”有什么作用?

以上是关于从 RPC 执行时,Windows START 命令无法运行的主要内容,如果未能解决你的问题,请参考以下文章

System.Diagnostics.Process.Start() 从 Windows 服务调用时无法启动进程

docker for windows:从容器到外部的 RPC

XpsDocumenWriter从Windows服务挂起,但从控制台运行时工作正常

Windows批处理 调用程序后 不等待子进程 父进程继续执行命令

Python XML-RPC 服务器作为 Windows 服务

利用Windows RPC绕过CFG防护机制