[英]CreateProcess only executes the half command
我对 CreateProcess 有疑问。 我创建了以下源代码:
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
CreateProcessA(nullptr,
"plink.exe -telnet -P 9999 192.168.230.75 < C:\\Users\\Mahre\\Scripts\\Telenet_Script.txt",
nullptr,//security
nullptr,// security
FALSE,//inherits handles
0,
nullptr,
nullptr,
&si,
&pi);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
问题是 CreateProcess 只执行了一半的命令。 命令plink.exe -telnet -P 9999 192.168.230.75
执行,但 CreateProcess 忽略这部分< C:\\Users\\Mahre\\Scripts\\Telenet_Script.txt
。 我很确定这是小于号。
使用 evil system()
它工作得很好,它执行了完整的命令:
system("plink.exe -telnet -P 9999 192.168.230.75 < C:\\Users\\Mahre\\Scripts\\Telenet_Script.txt");
有人可以向我解释如何使用 CreateProcess 做到这一点吗?
输入重定向运算符由 shell 提供,在本例中cmd.exe
。
要使用CreateProcess()
执行此操作,您需要自己执行此操作。
首先使用CreateFile()
打开要用作读取输入的文件,并将句柄设置为可继承。 调用CreateProcess()
时,需要将可继承句柄标志设置为 TRUE,并填写STARTUPINFO
结构以包含要用于标准输入的句柄。
以这种方式执行此操作时,您不应提供命令的“< 文件名”部分,因为您已经手动设置了它。
有关详细信息,请阅读 MSDN 上的CreateProcess
文档。 这些是文档中涵盖此案例变体的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.