Windows 7(64)上的C ++ CreateProcess错误代码2(“ERROR_FILE_NOT_FOUND”)

我试图创build一个简单的程序来testingWindows 7(64)上的C / C ++中的CreateProcess()函数。 当我直接传递CommandLine(“szCmdline”)参数它工作正常,但如果我尝试通过从argv获取它并传递给函数发送参数我在运行时得到“错误代码2(”ERROR_FILE_NOT_FOUND“)” 。

我正在寻找一个解决scheme,发现“ CreateProcess-failures-windows-7 ”在这个论坛上,但它似乎不适合我或我做错了什么。

这是NewProcess()代码:

void NewProcess(TCHAR **cmd){ printf("Argv Inside funcion: %s\n",cmd[1]); STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( !CreateProcess( NULL, // No module name (use command line) cmd[1], // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi ) // Pointer to PROCESS_INFORMATION structure ) { printf( "CreateProcess failed (%d).\n", GetLastError() ); return; } printf("Process ID: %d Started",pi.dwProcessId); // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); printf("\nProcess ID: %d Terminated!",pi.dwProcessId); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); } 

主要function代码:

 void main(int argc, TCHAR *argv[]) { printf("Argv outside function: %s\n",argv[1]); //LPTSTR szCmdline = _tcsdup(TEXT("C:\\Windows\\system32\\calc.exe")); <-- **It works fine** NewProcess(argv); // <-- **It doesn't works** } 

在运行时,cmd和argv包含相同的数据,但在CreateProcess()调用时失败。

结果:

 E:\C++\VISUAL_STUDIO\NewTest> newtest.exe "C:\Windows\System32\calc.exe" Argv outside function: C:\Windows\System32\calc.exe Argv Inside funcion: C:\Windows\System32\calc.exe CreateProcess failed (2). 

我testing了“C:\\ windows \\ system32 \\ calc.exe”,%windir%\ system32 \ calc.exe,“C:\ Windows \ SysNative \ calc.exe”

任何想法?

谢谢build议

你确定void main(int argc, TCHAR *argv[])是正确的吗? 在Windows中,我目前使用:

  • int main(int argc, char *argv[]) 8位ANSI字符
  • int wmain(int argc, wchar *argv[]) 16位UNICODE字符
  • int _tmain(int argc, TCHAR *argv[])宏定义

如果你发布了什么,如果你使用什么,你可以传递一个LPSTR *给你的函数,如果定义了UNICODE,那么这个函数需要一个LPWSTR *