C ++ CreateProcess – 系统错误#2无法find文件 – 我的文件path有什么问题?

我试图通过Firefox与CreateProcess() ,我是一个初学者,使用CreateProcess一无所知,但在我最后一个问题有人指出了它的MSDN …它显示:

 To run a batch file, you must start the command interpreter; set lpApplicationName to cmd.exe and set lpCommandLine to the following arguments: /c plus the name of the batch file. 

因此,我创build了一个batch file,使用system()命令可以很好地运行,batch file没有问题。

我不知道为什么系统找不到该文件,我不知道它的batch file,batch file中的exe文件,batch file中的PDF文档或cmd.exe的位置。 。 任何帮助是极大的赞赏…

 void openPDF(char scansQueue[][MAX_NAME], int index) { // build batch file char openPath[300]; char procCommand[MAX_NAME]="C:\\firefox"; char cmdEXE[MAX_NAME]="C:\\Windows\\System32\\cmd.exe"; fstream outfile; outfile.open("C:\\firefox.bat"); copyCString(openPath,"\"C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe\""); outfile << openPath; outfile << ' '; copyCString(openPath,"\"C:\\Scans\\"); catArray(openPath,scansQueue[index]); catArray(openPath,"\""); STARTUPINFOW si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); cout<<"PROCESS ATTEMPT"<<endl; if(!CreateProcess((LPCTSTR)cmdEXE ,(LPWSTR)procCommand, NULL, NULL, false, 0, NULL, NULL, &si, &pi))cout << GetLastError();cout<<"PROCESS FAILED TO EXECUTE!!!"; } 

这假设整个批处理文件是XY问题的一部分,因为你并不需要创建一个批处理文件,你只是想用命令行参数来启动Firefox。

我也假设你并不需要传递整个文件名的索引,而只需要传递文件名,就像我在那里调用函数一样。

 #include <Windows.h> #include <stdio.h> void MsgBoxLastError() { LPWSTR lpMsgBuf = NULL; if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&lpMsgBuf, 0, NULL ) != 0) { MessageBox(NULL, lpMsgBuf, L"Error", MB_OK); } LocalFree(lpMsgBuf); } void OpenWithFirefox(const char* Filename) { const WCHAR pathToFirefox[] = L"C:/Program Files (x86)/Mozilla Firefox/firefox.exe"; const WCHAR scanPrefix[] = L"file://C:/Scans/"; WCHAR fullCommandLine[MAX_PATH] = {0}; //Build full command line swprintf_s(fullCommandLine, L"\"%s\" \"%s%S\"", pathToFirefox, scanPrefix, Filename); STARTUPINFOW si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); BOOL success = CreateProcess(NULL, fullCommandLine, NULL, NULL, false, 0, NULL, NULL, &si, &pi); if(success) { CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } else { MsgBoxLastError(); } } int main() { const int MAX_NAME = 13; char scansQueue[][MAX_NAME] = { "file1.pdf", "file2.pdf" }; for(int i = 0; i < 2; ++i) { OpenWithFirefox(scansQueue[i]); } return 0; }