问题描述:使用system()函数执行命令"net start nginx",启动一个windows服务,会弹出一个dos窗口。同时,启动服务的过程比较久,因此不能单纯的采用WinExec()等方式调用,因为WinExec()调用方式是即调用即返回,还没等命令执行完成就结束了。
因此,这里采用的是ShellExecute加上同步的方式。
解决思路:采用ShellExecute执行命令,同时使用同步,等待该命令执行完成。
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = L"cmd.exe";//调用的程序名
ShExecInfo.lpParameters = L"cmd.exe /c net start nginx";//调用程序的命令行参数
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_HIDE;//窗口状态为隐藏
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);////等到该进程结束