我尝试执行与应用程序位于同一目录中的批处理文件,并隐藏批处理文件窗口,因为隐藏但代码由于某种原因不起作用。
请帮我解决代码中的错误。以下是代码。
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);
当控件进入代码的这一部分时,应用程序崩溃。
答案 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);