繁体   English   中英

CreateProcess 只执行一半命令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM