// 生成bat檔案 std::ofstream ofs("network_check.bat"); ofs << "@echo 360os Webservice connect check begin" << std::endl; ofs << "@echo 360os Webservice connect check end" << std::endl; ofs.close(); // 建立管道 SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = NULL; HANDLE hRead, hWrite; if (!CreatePipe(&hRead, &hWrite, &sa, 0)) { DWORD dErr = GetLastError(); CString szInfo; szInfo.Format(_T("Fail to Create Pipe Error: %d"), dErr); outInfo = szInfo; return FALSE; } // 建立程式 STARTUPINFO si = {sizeof(STARTUPINFO)}; si.hStdError = hWrite; si.hStdOutput = hWrite; si.wShowWindow = SW_HIDE; si.hStdInput = hRead; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; PROCESS_INFORMATION pi; CString strCmd = _T("cmd.exe /c network_check.bat"); if (!CreateProcess(NULL, strCmd.GetBuffer(), NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi)) { outInfo = _T("CreateProcess failed"); CloseHandle(hWrite); CloseHandle(hRead); return FALSE; } // 讀取管道資訊 std::string strResult; char buff[1025] = {0}; while (1) { DWORD dwRead = 0; PeekNamedPipe(hRead, buff, 4, &dwRead, NULL, NULL); if (0 == dwRead) { continue; } ZeroMemory(buff, sizeof(buff)); ReadFile(hRead, buff, 1024, &dwRead, NULL); strResult += buff; char* pStr = new char[strlen(buff) + 1]; strcpy_s(pStr, strlen(buff) + 1, buff); ::SendMessage(m_hWnd, WM_MSG_TESTINFO, (WPARAM)pStr,0); if (strResult.find("360os Webservice connect check end") != std::string::npos) { break; } } // 釋放資源 CloseHandle(hWrite); CloseHandle(hRead); CloseHandle(pi.hThread); CloseHandle(pi.hProcess);