#include <windows.h>
#include <iostream>
using namespace std;int main()
{
::STARTUPINFO si={sizeof(si)};
::PROCESS_INFORMATION pi;
//::ZeroMemory(&si,sizeof(si));
//si.cb=sizeof(si);
::ZeroMemory(&pi,sizeof(pi));
char* cmdLine="notepad";
if(!CreateProcess(NULL,(LPWSTR)cmdLine,NULL,NULL,NULL,NULL,NULL,NULL,&si,&pi))
{
cout<<"create process false!!"<<endl;
}
system("pause");
return 0;  
}
我猜想主要的问题可能出在上面的红色标记的那个参数上,vs08要求是Wchar型的指针,但是我改了好几次都是运行时错误,请大家帮忙看看,谢谢了,另外可不可能是哪个默认安全属性的结构体有问题呢,不是很熟悉vs08

解决方案 »

  1.   

    char* cmdLine="notepad";
    改变为
    TCHAR *cmdLine = _T("notepad");
      

  2.   

    不行, 还是运行时错误,导入TCHAR.h了 没有任何改变
      

  3.   

    你这个是UNICODE的问题,char* cmdLine="notepad";之类的字符串常量写成:
    TCHAR* cmdLine=_T("notepad");
      

  4.   


    int main()
    {
    ::STARTUPINFO si={sizeof(si)};
    ::PROCESS_INFORMATION pi;
    //::ZeroMemory(&si,sizeof(si));
    //si.cb=sizeof(si);
    ::ZeroMemory(&pi,sizeof(pi));
    //char* cmdLine="notepad";
    TCHAR* cmdLine=_T("notepad");
    if(!CreateProcess(NULL,cmdLine,NULL,NULL,NULL,NULL,NULL,NULL,&si,&pi))
    {
    cout<<"create process false!!"<<endl;
    }
    system("pause");
    return 0;  
    }我已经把它改成了这个样子了,可是还是运行时错误,
      

  5.   

     TCHAR* cmdLine=_T("notepad");
    =========
    将这句改成:TCHAR cmdLine[]=_T("notepad");
    因为CreateProcess在调用时会改上面的那个字符数组,定义成指针会使它分配在常量区,造成内存访问错。
      

  6.   

    //::ZeroMemory(&si,sizeof(si));
    //si.cb=sizeof(si);
    为什么注释掉?
      

  7.   

    参数 pszApplicationName
        传入的是一个非"常量字符串"地址。CreateProcess实际上会修改我们传给
        它的命令行字符串。在CreateProcess返回之前,它会将这个字符串还原为原本形式。
        
        命令行字符串包含文件映像的只读部分,会引起访问违规。
    可以将TCHAR* cmdLine=_T("notepad");改为TCHAR cmdLine[]=_T("notepad");