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");
它一直抛出Error(2)-> The System cannot find the file specified
。
我不知道出了什么问题。我还尝试在同一目录中使用"Calc.exe“。但它不起作用。
发布于 2012-01-13 08:11:11
您可以使用L
前缀来生成宽字符串:
L"D:\\test dir 1\\Calc.exe";
将字符串文字转换为不同的字符宽度不会使字符串变宽。
发布于 2012-01-13 09:09:03
除了已经指出的字符串类型问题之外,第二个参数(lpCommandLine)必须指向可写缓冲区,而不是常量字符串。您可以通过如下方式声明它来完成此操作:
WCHAR procArg[] = L"blacknull";
This is documented in MSDN:“此函数的Unicode版本CreateProcessW可以修改此字符串的内容。因此,此参数不能是指向只读内存(如常量变量或文字字符串)的指针。如果此参数是常量字符串,则此函数可能会导致访问冲突。”
https://stackoverflow.com/questions/8844076
复制相似问题