2011-11-02 79 views
0

我使用此代码启动我的程序CreateProcess()无法正常工作

  int _tmain(int argc, _TCHAR* argv[]) 
{ 
    STARTUPINFO cif; 
    ZeroMemory(&cif,sizeof(STARTUPINFO)); 
    PROCESS_INFORMATION pi; 
    if (CreateProcess(L"C:\\test\\test.exe",NULL, 
     NULL,NULL,FALSE,CREATE_UNICODE_ENVIRONMENT,NULL,NULL,&cif,&pi)==TRUE) 
    { 
     cout << "process" << endl; 
     cout << "handle " << pi.hProcess << endl; 
    } 
    system("pause"); 
    return 0; 
} 

程序正常启动,但立即失败(没有响应并失败)。 CreateProcess返回true。当我从代码启动test.exe时,它可以正常工作。

+0

调试器告诉你什么是错误的?你*是*使用调试器,不是吗? –

+0

哪个程序崩溃,正在启动新进程的代码或test.exe? –

+0

如果您将进程创建标志(而不是CREATE_UNICODE_ENVIRONMENT)传递给“0”,会发生什么情况?您将'CREATE_UNICODE_ENVIRONMENT'作为此标志和'NULL'传递给环境块,但是您确定调用进程的环境块使用'UNICODE'字符吗? –

回答

5

您必须清零STARTUPINFO和PROCESS_INFORMATION的内存,并且必须设置STARTUPINFO结构的cb字段。

复制sample code in the Microsoft documentation是一个很好的开始。

+0

的确如此,但几分钟前OP已经发表了评论,称他发现问题。 – karlphillip

+1

不设置cb字段可能不是一个好主意。它可能适用于他特定版本的Windows。不要指望它能在早期版本或后期版本上运行。或者在为这件事提供服务包之后。 –

0

我发现问题,我没有设置test.exe目录(CreateProcess中的第8个参数)。感谢所有