【发布时间】:2011-02-23 18:39:03
【问题描述】:
我正在尝试使用 WScript.exe 为当前用户(在 Windows 上)“留言”,而不是等待用户确认该消息。
我的想法是创建一个新进程,使用“start”内置(它通常会打开一个新窗口并将执行控制权返回给调用者)并使用一个简短的脚本调用 WScript 以在屏幕上打开一个消息框,然后退出。
除非我尝试从该脚本打开管道(并阅读它),否则这可以正常工作。如果我尝试从管道中读取,则读取 I/O 永远不会在 wscript.exe 退出之前获得 EOF,即使该程序在“开始”命令之后继续执行。
这是一个例子:
test.vbs
WScript.Echo "Hello World!"
invoke.cmd
start wscript.exe //nologo test.vbs
@echo Exiting...
exit /b
如果我在命令提示符下运行 invoke.cmd,WScript 窗口将打开并且控制返回到提示符。
但是,如果我尝试将输出通过管道传输到命令(尝试读取管道),则子命令似乎永远不会看到管道已关闭,直到 wscript.exe 退出。 p>
但是,此行为不需要 WScript.exe。只要“start”创建的进程仍在运行,它似乎就会以这种方式运行。我可以使用“cmd.exe /k”获得相同的行为。
invoke2.cmd
start cmd /k date /t
@echo Exiting...
exit /b
尝试从invoke2.cmd 中的管道读取数据会阻塞,直到“start”-ed 进程结束。
我没有看到任何用于“启动”的命令行参数声称可以控制这样的行为,而且我真的不明白为什么使用“启动”来创建新进程/窗口的 cmd.exe 不会' t 退出,直到“开始”窗口退出。
奇怪的是,如果我将输出重定向到一个文件,一切都会奏效。它只是不适用于管道。
有什么想法吗?
【问题讨论】: