从 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批处理 调用程序后 不等待子进程 父进程继续执行命令