Здравствуйте balder, Вы писали:
B>Возникла такая проблема, что необходимо запускать подряд несколько дос-утилит из под win-интерфейса, причем если использовать функцию WinExec или ShelExecute то нет возможности дождаться завершения дос-утилиты перед запуском следующей (что очень необходимо), а если использовать spawnlp, то появляющийся экран доса , который надо постоянно закрывать, сильно все портит.
B>Может кто знает, как еще можно запуск осущесвтлять, или может я чего-то в этих функциях не допонял? Помогите плз!
Насчет "закрытия экрана доса" — похоже, у твоего приложения так настроены установки ярлыка (или вообще нет ярлыка).
А насчет дождаться — это пожалуйста:
void Execute(LPCSTR pathName, LPCSTR params, BOOL bWait)
{
STARTUPINFO si;
ZeroMemory(&si, sizeof si);
si.cb = sizeof si;
PROCESS_INFORMATION pi;
CString quote='"';
CString cmd=quote+pathName+quote+" "+params;
BOOL bResult=CreateProcess(0, cmd.LockBuffer(), 0, 0, TRUE, 0, 0, 0, &si, &pi );
_ASSERTE(bResult);
if(bResult && bWait)
{
while(WaitForSingleObject(pi.hProcess, 100)==WAIT_TIMEOUT)
{
MessagePump();
}
}
cmd.UnlockBuffer();
}
PS: тут возня с CString от MFC/WTL для того, чтобы в CreateProcess передавать неконстантную строку lpCommandName. Кроме того, путь заключается в кавычки (чтобы пробелы в пути не воспринимались как параметры).