为什么我用CreateProcess不能启动Win2k自带的telnet.exe程序?

xyangj 2002-05-18 12:27:39
我用CreateProcess启动telnet时,只有一个黑窗口闪一下就消失了。
我的代码:
/***************
New_Process 是一个结构,其中包含几个匿名管道句柄, 用来操作telnet
的输入和输出,定义为:
typedef struct New_Process
{
HANDLE readInput;//子进程从此句柄所属管道中得到父进程传过来的数据
HANDLE writeInput;//父进程向此句柄所属管道写入数据传给子进程

HANDLE readOutput;//父进程从此句柄所属管道中读出子进程输出数据
HANDLE writeOutput;//子进程向此句柄所属管道写入执行结果数据返回给父进程

HANDLE readError;//父进程从此句柄所属管道中读出子进程错误数据
HANDLE writeError;//子进程向此句柄所属管道写入执行错误信息返回给父进程
}New_Process;
******************/

New_Process * new_process=new New_Process;
//管道的权限描述
SECURITY_ATTRIBUTES security = {
sizeof(SECURITY_ATTRIBUTES),
NULL,
TRUE
};
security.bInheritHandle =TRUE;
security.nLength=sizeof(SECURITY_ATTRIBUTES);
security.lpSecurityDescriptor=NULL;
CreatePipe(&new_process->readInput,&new_process- >writeInput,&security,0);
CreatePipe(&new_process->readOutput,&new_process->writeOutput,&security,0);
CreatePipe(&new_process->readError,&new_process->writeError,&security,0);

STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.lpReserved2 = NULL;
si.cbReserved2 = 0;
si.lpDesktop = NULL;
char SysDir[256];
GetSystemDirectory(SysDir,256);
si.dwFlags = 0;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.hStdInput = new_process->readInput;
si.hStdOutput = new_process->writeOutput;
si.hStdError = new_process->writeError;
si.wShowWindow = SW_SHOWNORMAL;

BOOL err=CreateProcess("telnet.exe",NULL,
NULL,NULL,
true,CREATE_NEW_CONSOLE |CREATE_DEFAULT_ERROR_MODE
| NORMAL_PRIORITY_CLASS,
NULL,SysDir,
&si,&pi);
...全文
38 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjsoft1 2002-05-21
  • 打赏
  • 举报
回复
我原来用于PGP解密的!!!

AnsiString command;
STARTUPINFO start;
PROCESS_INFORMATION proinfo;
ZeroMemory(&start,sizeof(start));
start.cb=sizeof(start);
start.dwFlags=STARTF_USESHOWWINDOW;
start.wShowWindow=SW_SHOWDEFAULT;
int ret;
command=PGPV_PATH+" "+Secr_FileName+" -o "+Desc_FileName;
ret=CreateProcess(NULL,command.c_str(),
NULL,NULL,false,
CREATE_NEW_CONSOLE,
NULL,pgp_path->Text.c_str(),&start,&proinfo);
if(ret==0){
ret=GetLastError();
message_set("-E-CreateProcess error,ErrorCode="+IntToStr(ret),2);
return false;
}
WaitForSingleObject(proinfo.hProcess,INFINITE);
return true;
wjsoft1 2002-05-21
  • 打赏
  • 举报
回复
请看我原来实现的东西,用于PGP解密

AnsiString command;
STARTUPINFO start;
PROCESS_INFORMATION proinfo;
ZeroMemory(&start,sizeof(start));
start.cb=sizeof(start);
start.dwFlags=STARTF_USESHOWWINDOW;
start.wShowWindow=SW_SHOWDEFAULT;
//SW_HIDE;
int ret;
command=PGPV_PATH+" "+Secr_FileName+" -o "+Desc_FileName;
ret=CreateProcess(NULL,command.c_str(),
NULL,NULL,false,
CREATE_NEW_CONSOLE,
NULL,pgp_path->Text.c_str(),&start,&proinfo);
if(ret==0){
ret=GetLastError();
message_set("-E-CreateProcess error,ErrorCode="+IntToStr(ret),2);
return false;
}
WaitForSingleObject(proinfo.hProcess,INFINITE);
return true;
xyangj 2002-05-18
  • 打赏
  • 举报
回复
有没有知道阿?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧