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”。但它不起作用。
答案 0 :(得分:5)
使用L
前缀创建宽字符串:
L"D:\\test dir 1\\Calc.exe";
将字符串文字强制转换为不同的字符宽度不会使字符串变宽。
答案 1 :(得分:3)
除了已经指出的字符串类型问题之外,第二个参数(lpCommandLine)必须指向可写缓冲区,而不是常量字符串。您可以通过如下声明来完成此操作:
WCHAR procArg[] = L"blacknull";
这是documented in MSDN:“此函数的Unicode版本CreateProcessW可以修改此字符串的内容。因此,此参数不能是指向只读内存的指针(例如const变量或如果此参数是常量字符串,则该函数可能会导致访问冲突。“