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
。
我不知道什么是错的。 我也试图使用在同一个目录中的“Calc.exe”。 但它不工作。
您使用L
前缀来制作一个宽字符的字符串:
L"D:\\test dir 1\\Calc.exe";
将字符串文字转换为不同的字符宽度不会使字符串变宽。
除了已经指出的字符串类型的问题,第二个参数(lpCommandLine)必须指向一个可写缓冲区,而不是一个常量字符串。 你可以通过声明如下来做到这一点:
WCHAR procArg[] = L"blacknull";
这在MSDN中有记录 :“此函数的Unicode版本CreateProcessW可以修改此字符串的内容,因此,此参数不能是指向只读内存(如const变量或文字字符串)的指针。此参数是一个常量字符串,该函数可能会导致访问冲突。“