我需要从C ++运行一个执行.exe应用程序的批处理文件,.exe是一个名为dumpedid的免费程序,它将监视器的edid写入文本文件。我使用了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 );
感谢。
编辑 - 我刚尝试直接从命令行运行批处理文件,我注意到一些奇怪的东西,批处理文件的内容是
开始/等待/ d“D:... \ dumpedid”&gt; “d:... \ edid.txt”
但运行批处理文件时显示的命令是
开始/等待/ d“D:... \ dumpedid”1&gt;“D:... \ edid.txt”
注意&gt;之前的1符号和1之前的额外空间
答案 0 :(得分:3)
start
需要两点注意。
标题选项是第一个引用的参数,因此如果您有引用的cmd,则还需要标题选项。
start "myTitle" /start "cmd"
如果您尝试重定向输出,则需要转义重定向,因为正常重定向将重定向start
命令的输出而不是已启动命令的输出!
start "" /wait /d "DumpEDID.exe" ^> "edid.txt"