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() 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
CreateProcess 无法在 Windows 7 中启动 Adobe Reader
为啥 CreateProcess 给出错误 193(%1 不是有效的 Win32 应用程序)