CreateProcess仅执行Half命令

我对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,&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。我很确定这是小于号。

使用邪恶的system()可以很好地工作,并且可以执行完整的命令:

system("plink.exe -telnet -P 9999  192.168.230.75 < C:\\Users\\Mahre\\Scripts\\Telenet_Script.txt");

有人可以向我解释如何使用CreateProcess做到这一点吗?

c5577855 回答:CreateProcess仅执行Half命令

输入重定向操作符由外壳程序提供,在这种情况下为Get-ChildItem "C:\Program Files" -directory -recurse | % { if ($_.fullname -like '*\XmlLogs\*') { Get-ChildItem $_.FullName -Recurse -file -filter "*.xml" | Remove-Item -Force -WhatIf } }

要使用public int GetDifference(long start,long end){ Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(start); int hour = cal.get(Calendar.HOUR_OF_DAY); int min = cal.get(Calendar.MINUTE); long t=(23-hour)*3600000+(59-min)*60000; t=start+t; int diff=0; if(end>t){ diff=(int)((end-t)/ TimeUnit.DAYS.toMillis(1))+1; } int leapYear = (diff/365)/4; return (diff-leapYear)/365; } 执行此操作,您需要自己执行此操作。

首先使用cmd.exe打开要用作读取输入的文件,并将句柄设置为可继承的。调用CreateProcess()时,需要将可继承的handles标志设置为TRUE,并填写CreateFile()结构以包含要用于标准输入的句柄。

以这种方式执行此操作时,不应提供命令的“

有关更多信息,请阅读MSDN上的CreateProcess()文档。文档中的示例涉及此案例的变体。

本文链接:https://www.f2er.com/3124712.html

大家都在问