c ++使用createprocess执行批处理文件

时间:2016-02-12 12:51:29

标签: c++ batch-file

我尝试执行与应用程序位于同一目录中的批处理文件,并隐藏批处理文件窗口,因为隐藏但代码由于某种原因不起作用。

请帮我解决代码中的错误。以下是代码。

STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;


memset(&StartupInfo, 0, sizeof(StartupInfo));
StartupInfo.cb = sizeof(STARTUPINFO);
StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow = SW_HIDE;

CreateProcess(NULL, _T("Testfile.bat"), NULL, NULL, FALSE,CREATE_NEW_CONSOLE, NULL, NULL,&StartupInfo,&ProcessInfo);

当控件进入代码的这一部分时,应用程序崩溃。

1 个答案:

答案 0 :(得分:0)

以下是用于在后台运行bat的伪代码

 //... Prepare
 //
 // Get Current Dir  
 #define BUFSIZE MAX_PATH             
 TCHAR myBat[BUFSIZE];
 DWORD dwRet;    
 dwRet = GetCurrentDirectory(BUFSIZE, myBat);

 // Append .bat name
 myBat += "this_one.bat"


//... Execute
//
STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi;

wchar_t cmdline[] = L"cmd.exe /C "+ myBat ;
wchar_t cmdline2[] = L"start /MIN /B \"\" \""+ myBat +"\"";

// For kiosk windows
//wchar_t cmdline[] = L"%systemroot%\\system32\\cmd.exe /C "+ myBat ;

if (!CreateProcess(NULL, cmdline, NULL, NULL, false, CREATE_UNICODE_ENVIRONMENT,
   NULL, NULL, &si, &pi))
{
    std::cout << GetLastError();
    abort();
}

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