0

コマンドを cmd.exe に送信してエラー 2 を受け取るプロセスを作成しようとしています。なぜですか? 可能ですか?どのように?

    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    String pathexe = "C:\Windows\system32\cmd.exe";
    String command= "notepad.exe";

    if(!CreateProcess(
            pathexe.c_str(),  // lpApplicationName
            command.c_str(),  // lpCommandLine
            NULL,   // lpProcessAttributes
            NULL,   // lpThreadAttributes
            FALSE,  // bInheritHandles
            0,      // dwCreationFlags
            NULL,   // lpEnvironment
            NULL,   // lpCurrentDirectory
            &si,    // lpStartupInfo
            &pi     // lpProcessInformation
            ))
    {
        AnsiString error = GetLastError();
        ShowMessage("Error: " + error);
    }
    WaitForSingleObject( pi.hProcess, INFINITE );
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );

PD: 1) この目的で CreateProcess () を使用できると想定されています。ShellExecute () または system() では使用しないでください。2)フォーラムでそれについて読みましたが、このエラーの解決策が見つかりません。同様の質問に対する回答はたくさんありますが、エラーに対処していません。他の機能が提案されているか、ルート コマンドと混在しています。3) マニフェストを作成中にビルドしたため、問題が許容されるとは思いません。4) 私は現在、win7 で 32 ビットの C++ Builder を使用していますが、重要ではありません。5) この問題は (いつものように) 否定的で重複したものとして投票されると思いますが、提案されたテスト例もエラーを受け取ります。ありがとうございます

最初の結論:

エラー 2: 指定されたファイルが見つかりません。

リンク機能: https://msdn.microsoft.com/es-es/library/windows/desktop/ms679360(v=vs.85).aspx リンク エラー: https://msdn.microsoft.com/es-es/ライブラリ/ウィンドウ/デスクトップ/ms681382(v=vs.85).aspx

エラー 2 の場合: 構文、ファイル パス、および存在を確認してください。

作品:

STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    String command = "notepad.exe";

    if(!CreateProcess(
            NULL,   // lpApplicationName
            commmand.c_str(), // lpCommandLine
            NULL,   // lpProcessAttributes
            NULL,   // lpThreadAttributes
            FALSE,  // bInheritHandles
            0,      // dwCreationFlags
            NULL,   // lpEnvironment
            NULL,   // lpCurrentDirectory
            &si,    // lpStartupInfo
            &pi     // lpProcessInformation
            ))
    {
        AnsiString error = GetLastError();
        ShowMessage("Error: " + error);
    }
    WaitForSingleObject( pi.hProcess, INFINITE );
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );

この例はexeでも機能します

String command = "cd C:\\sample\\calc.exe";

ただし、cmd の一般的なコマンドではありません。次のようにコマンドを cmd に送信する方法が必要です。

notepad.exe && cd C:\sample\ && sample1.txt

ありがとうございます

4

1 に答える 1