簡體   English   中英

C ++ CreateProcess-系統錯誤#2找不到文件-我的文件路徑出了什么問題?

[英]C++ CreateProcess - System Error #2 can't find file - what is wrong with my file path?

我試圖通過Firefox使用CreateProcess()打開PDF,我是一個初學者,對使用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.

因此,我創建了一個批處理文件,該批處理文件可以通過system()命令完美運行,該批處理文件沒有任何問題。

我不知道為什么系統找不到文件,我也不知道它是不是批處理文件,批處理文件中的exe,批處理文件中的PDF doc或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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM