使用CreateProcess createprocess失败

CreatProcess(LPCSTR lpApplicationName,LPSTRlpCommandLine,LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcesInformation);

lpApplicationName是应用程序的名称
lpCommandLine是命令行参数
lpProcessAttributes是进程的属性
lpThreadAttributes是线程的属性
bInheritHandles 是否继承父进程的属性
dwCreationFlags 是创建标志
lpEnvironment 是环境变量
lpCurrentDirectory 是当前目录
lpStartupInfo是传给新进程的信息
lpProcessInformation是进程返回的信息

调用函数的例子如下:
//创建进程
void TestCreateProcess(void)
{
//清空结构
STARTUPINFO sInfo;
PROCESS_INFORMATION pInfo;
ZeroMemory(&sInfo,sizeof(sInfo));
sInfo.cb=sizeof(sInfo);
sInfo.[]dwFlags=STARTF_USESHOWWINDOW;
sInfo.wShowWindow=SW_SHOWNORMAL;

ZeroMemory(&pInfo,sizeof(pInfo));

//创建一个进程
if(!::CreateProcess(_T("WinCpp.exe"),NULL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&sInfo,
&pInfo))
{
//输出出错信息
const intnBufSize=512;
TCHARchBuf[nBufSize];
ZeroMemory(chBuf,nBufSize);

wsprintf(chBuf,_T("CreateProcessfailed(%d).n"),GetLastError());
::OutputDebugString(chBuf);
return;
}

//等进程关闭
WaitForSingleObject(pInof.hProcess,INFINITE);

//关闭进程和线程的句柄
使用CreateProcess createprocess失败
CloseHandle(pInfo.hProcess);
CloseHandle(pInfo.hThread);
}

我们用CreateProcess执行一个外部程序时,怎样才能得到这个程序的输入输出呢?

CreateProcess已经替我们准备好了,在CreateProcess的STARTUPINFO参数里有这样几个

hStdInput,hStdOutput,hStdError东东,用来为创建的进程指定输入输出,例如用

CreateFile创建一个文件,接着把得到的文件句柄指定给hStdOutput,并且把dwFlags的值

设置为USESTDHANDLES,这样外部程序的输出就会输到这个文件里。注意,CreateFile的

SECURITY_ATTRIBUTES.bInheritHandle参数要设为TRUE。

在Create系列函数中通常都会有一个叫SECURITY_ATTRIBUTES的参数
SECURITY_ATTRIBUTES sa;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor=NULL;
sa.bInheritHandle=TRUE;
如果把bInheritHandle的值设为TRUE,意思就是它所创建出来的东西是可以被其他的子进程

使用的。例如用CreatePipe创建的管道可以用在CreateProcess创建的进程中。

用CreateProcess创建子进程时通过lpCurrentDirectory参数指定子进程运行的路径。

#include <windows.h>

#include <stdio.h>

#include <tchar.h>

void _tmain( int argc, TCHAR *argv[] )

{

STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );

si.cb =sizeof(si);

ZeroMemory( &pi, sizeof(pi) );

if( argc!= 2 )

{

printf("Usage: %s [cmdline]n", argv[0]);

return;

}

// Startthe child process.

if(!CreateProcess( NULL, // Nomodule name (use command line)

argv[1],// Command line

NULL,// Process handle not inheritable

NULL,// Thread handle not inheritable

FALSE,// Set handle inheritance to FALSE

0,// No creation flags

NULL,// Use parent's environment block

NULL,// Use parent's starting directory

&si,// Pointer to STARTUPINFO structure

&pi)// Pointer to PROCESS_INFORMATION structure

)

{

printf( "CreateProcess failed (%d).n", GetLastError() );

return;

}

// Waituntil child process exits.

WaitForSingleObject( pi.hProcess, INFINITE );

// Closeprocess and thread handles.

CloseHandle( pi.hProcess );

CloseHandle( pi.hThread );

}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lgdgyd2/archive/2009/03/20/4007333.aspx

  

爱华网本文地址 » http://www.aihuau.com/a/25101016/305176.html

更多阅读

避孕套的正确使用方法图解 如何使用避孕套图解

避孕套的正确使用方法(图解)——简介正确的使用避孕套才不会导致避孕失败避孕套的正确使用方法(图解)——方法/步骤避孕套的正确使用方法(图解) 1、选择适合自己的避孕套,不能过大或过小。打开包装向避孕套内吹气,如果漏气就说明这个套套破

WinXP系统下Windows延缓写入失败解决方法 window 延缓写入失败

WinXP系统下Windows延缓写入失败解决方法——简介当使用WindowsXP系统突然停电或是不正常关机的情况下,也许会导致“Windows延缓写入失败”,所以用户在关机的情况下最好不要直接拔电源或是强行关机。如遇到这个问题的朋友用以下方法可

windows延缓写入失败的解决办法 xp延缓写入失败怎么办

windows延缓写入失败的解决办法——简介windows延缓写入失败最主要的原因就是不正常关机了,比如电脑突然没电、强制关机、蓝屏等等这些都属于不正常关机,大家在使用电脑时应尽量避免不正常关机,以免出现windows延缓写入失败的问题。wi

mhdd硬盘检测工具使用方法 mhdd检测不到移动硬盘

mhdd硬盘检测工具使用方法——简介因为dos环境无法截图。本来想在虚拟机上测试其运行环境,来讲述mhdd的使用方法。但是虚拟机总是出错没时间去调试。所以借助别人的文章讲解一下mhdd基本使用方法。该软件是纯dos环境下使用的软所以不

配置windows失败,还原更新,请勿关机 windows失败还原更改

最近笔者一个朋友的电脑出现了“配置windows失败,还原更新,请勿关机”这样的问题,笔者再网上一搜,发现碰到这个问题的用户还不少,而且出现这个问题的用户很多是使用的破解版的系统,那么到底怎么解决呢?出现提示“配置windows失败,

声明:《使用CreateProcess createprocess失败》为网友高调转身分享!如侵犯到您的合法权益请联系我们删除