1

.exeアプリケーションを実行するC++からバッチファイルを実行する必要があります。.exeは、モニターのedidをテキストファイルに書き込むdumpedidと呼ばれる無料のプログラムです。私はCreateProcessを使用しましたが、バッチファイルが開始コマンドを使用しない限り機能します

"DumpEDID.exe" > "edid.txt" // this works
start /wait /d "DumpEDID.exe" > "edid.txt" // this doesn't

/ waitコマンドを使いたいのですが、これは問題です。これはアプリケーション自体の問題でしょうか?バッチファイルを実行するための私のコードは以下のとおりです

std::ofstream fs;
fs.open(DUMP_EDID_BATCH_FILE_PATH);
fs << "\"" << DUMP_EDID_EXE_PATH << "\" > \"" << DUMP_EDID_TXT_FILE_PATH << "\"";
fs.close();

STARTUPINFOA si;
PROCESS_INFORMATION pi;

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

std::string str = (std::string)"/c " + "\"" + DUMP_EDID_BATCH_FILE_PATH + "\"";
char * cmdLine = new char[str.size() + 1];
strncpy(cmdLine,str.c_str(), str.size());
cmdLine[str.size()] = '\0';

if( !CreateProcessA( "c:\\Windows\\system32\\cmd.exe", 
    cmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi) ) 
{
    delete[] cmdLine;
    DWORD errCode = GetLastError();
    g_log.Info(_T("CreateProcess failed - error code %d"), errCode);
    return errCode;
}

delete[] cmdLine;

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread ); 

ありがとう。

編集-コマンドラインから直接バッチファイルを実行しようとしましたが、何か奇妙なことに気づきました。バッチファイルの内容は次のとおりです。

start / wait / d "D:... \ dumpedid"> "D:... \ edid.txt"

しかし、バッチファイルを実行すると表示されるコマンドは

start / wait / d "D:... \ dumpedid" 1> "D:... \ edid.txt"

>記号の前の1と1の前の余分なスペースに注意してください

4

1 に答える 1

3

start2つの点で少し注意が必要です。

タイトルオプションは最初に引用符で囲まれた引数であるため、引用符で囲まれたcmdがある場合は、タイトルオプションも必要です。
start "myTitle" /start "cmd"

出力をリダイレクトしようとすると、リダイレクトをエスケープする必要があります。通常のstartリダイレクトでは、開始されたコマンドではなく、コマンド の出力がリダイレクトされるためです。

start "" /wait /d "DumpEDID.exe" ^> "edid.txt"

于 2012-04-21T07:40:26.250 に答える