CreateProcess()错误

时间:2012-01-12 23:52:25

标签: c++ windows createprocess

STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
memset(&pi, 0, sizeof(pi));
si.cb = sizeof(si);

LPCWSTR procName =(LPCWSTR)"D:\\test dir 1\\Calc.exe";
LPWSTR procArg   =(LPWSTR)"blacknull";

if(CreateProcess(procName,procArg,0,0,0,CREATE_DEFAULT_ERROR_MODE,0,0,&si,&pi))
{
    //do some work
}

printf( "CreateProcess failed (%d).\n", GetLastError());
     system("Pause");

它不断抛出错误(2) - > The System cannot find the file specified

我不知道出了什么问题。我也尝试在同一个Dir中使用“Calc.exe”。但它不起作用。

2 个答案:

答案 0 :(得分:5)

使用L前缀创建宽字符串:

L"D:\\test dir 1\\Calc.exe";

将字符串文字强制转换为不同的字符宽度不会使字符串变宽。

答案 1 :(得分:3)

除了已经指出的字符串类型问题之外,第二个参数(lpCommandLine)必须指向可写缓冲区,而不是常量字符串。您可以通过如下声明来完成此操作:

WCHAR procArg[] = L"blacknull";

这是documented in MSDN:“此函数的Unicode版本CreateProcessW可以修改此字符串的内容。因此,此参数不能是指向只读内存的指针(例如const变量或如果此参数是常量字符串,则该函数可能会导致访问冲突。“