【发布时间】:2013-11-01 19:21:55
【问题描述】:
我正在尝试使用 CreateProcess 启动子进程,但是我不断收到 error 2,根据文档,找不到文件。
我的代码如下所示:
if (!(CreateProcess(LPCTSTR("test.exe") ,NULL ,NULL,NULL,FALSE ,0 ,NULL ,NULL ,&producer_si
,&producer)))
{
printf("Create process failed!(%d)\n", GetLastError());
}
test.exe 是我之前创建的可执行程序。子进程很简单,代码如下:
void _tmain (int argc, TCHAR* argv[])
{
printf("%s\n", "hello!");
}
test.exe 也位于与父进程相同的文件夹中。我不明白为什么我总是收到错误代码 2。
【问题讨论】:
-
我会强烈建议使用
CreateProcess的UTF-16版本@ANSI版本有奇怪的行为 -
是的,您应该使用 Unicode 版本,但要注意如果您使用
lpCommandLine参数,它必须指向可写内存,因为CreateProcessW()可以修改指向的数据。CreateProcessA()没有这个限制。 -
正如 Remy 所说,您会被 ANSI 版本所吸引。并不是说那会让你离开 Unicode 版本。你只需要做对。而且 ANSI 版本也需要一个常量字符串,这只是一个实现的怪癖,可以改变,让你摆脱它。