CreateProcess() 无法正常工作

Posted

技术标签:

【中文标题】CreateProcess() 无法正常工作【英文标题】:CreateProcess() not work properly 【发布时间】:2011-11-02 17:08:43 【问题描述】:

我正在使用此代码来启动我的程序

     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 返回真。当我不是从代码启动 test.exe 时,它​​可以正常工作。

【问题讨论】:

调试器告诉你什么是错误的?您正在使用调试器,不是吗? 哪个程序崩溃了,这段代码正在启动新进程,还是test.exe 如果你传递0 作为进程创建标志(而不是CREATE_UNICODE_ENVIRONMENT)会发生什么?您将 CREATE_UNICODE_ENVIRONMENT 作为此标志传递,NULL 作为环境块传递,但您确定调用进程的环境块使用 UNICODE 字符吗? 我发现我没有为 test.exe 设置环境的问题(CreateProcess 中的第 8 个参数)。谢谢大家 @bossman 太好了,添加这个答案,让大家知道你是如何解决它的。 【参考方案1】:

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

复制sample code in the Microsoft documentation 是一个不错的起点。

【讨论】:

是的,但 OP 几分钟前已经发表评论说他发现了问题。 不设置 cb 字段可能不是一个好主意。它可能适用于他特定版本的 Windows。不要期望它适用于更早或更高的版本。或者在服务包之后。【参考方案2】:

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

【讨论】:

以上是关于CreateProcess() 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

UNC 路径上的 VC++ Createprocess

CreateProcess 无法在 Windows 7 中启动 Adob​​e Reader

为啥 CreateProcess 给出错误 193(%1 不是有效的 Win32 应用程序)

金蝶K3在建立帐套时出现无法创建数据库,错误xpsql.cpp,错误5来自createprocess

CreateProcess 运行带有参数的 jar

无法识别 C++ CreateProcess 'telnet'