<span style="font-family:Arial, Helvetica, sans-serif;">//原文代码:</span>
<span style="font-family: Arial, Helvetica, sans-serif;">STARTUPINFO si = sizeof(si);</span>
PROCESS_INFORMATION pi;
char* szCommandLine ="notepad"; //notepad是打开记事本
::CreateProcess(NULL,szCommandLine,NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi);
STARTUPINFO 此结构在《windows 程序设计第二版》--王艳平中的初始化是:STARTUPINFO si =sizeof(si);
我在VC6.0编译器中用这样的初始化,编译没有错误 ,但是创建进程就失败了。
起初以为是我抄错了,核对了一下代码,没有错。就开始找一下是不是程序代码那里定义错了,毕竟这本书是比较老的书了。
经过调试:创建进程函数CreateProcess返回是0,创建失败。
还好这段代码才几行,找出错误对我这个初学者来说还是可以找出来的。
既然是创建进程失败,说明给的参数是有错的,这个创建进程总共就三个参数给传值其他的都是设置NULL(默认)。
我最开始怀疑的是szCommandLine 这个字符串指针,因为我知道有的程序是要给直接路径的。所以我就把szCommandLine =“c:\\windows\notepad.exe”改成这样。
但运行还是不行。那就说明不是这里的问题,我就再看一下这个CreateProcess的SDK,原来这个函数是可以不用给直接路径的,它会自动搜索系统中的文件。
这个时候我把目光转向这个STARTUPINFO 这个结构体,在书本中有提到这个函数一定要初始化cb。这个时候我就把si=sizeof(si); 这个初化改成si.cb=NULL;
运行之后还是创建进程失败。这个时候我真的没有办法,因为我是自学+