Добрый день. Проблемма у меня возникла следующая. Есть две взаимосвязанные программы, первая я так понимаю драйвер или что то в этом духе имеет расширение com, вторая обычный exe. Суть их работы это подписка файлов. В обычном режиме это работает так. Открывается коммандная строка, запускается программа с расширением com, которая грузит драйвер, при этом я просмотрел в процессах стартует ntwdm. Затем запускается вторая программа которой параметрами передаются имена файлов которые необходимо подписать. Теперь понадобилось автоматизировать этот пароцесс, сразу скажу варианты с написанием bat файлов меня не интересуют впринципе. Так вот как я непытался реализовать это програмно ничего неработает, при этом даже нестартует ntwdm. У меня уже практически опустились руки, ничего немогу понять и придумать. Буду благодарен вам за советы по решению этой проблеммы.
Составляешь цикл и вперед: // Запускаем процесс STARTUPINFO si; ::GetStartupInfo(&si); PROCESS_INFORMATION pi; if(!::CreateProcess(NULL, (LPSTR)(LPCSTR)s, NULL, NULL, FALSE, NULL, NULL, cdir, &si, &pi)) return false; // Получаем вркмя ожидания int delay = atoi(st.GetValue("....")); // Ждем его завершения ::WaitForSingleObject(pi.hProcess, delay); // Грохаем процесс HANDLE hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pi.dwProcessId); if(hProc) TerminateProcess(hProc, 0); // Закрываем описатели ::CloseHandle(pi.hThread); ::CloseHandle(pi.hProcess); ::CloseHandle(hProc); Грохать процесс совсем необязательно, смотря какая у тебя обстановка. Судя по всему у тебя NT/2K/XP (ntvdm только там) Удачи
Благодарен вам за ваш ответ. Но мне непонятны некоторые аспекты, как например зачем грохать процесс ? Стартовать процессы я так понимаю нужно последовательно в том порядке в котором идет вызов программ ?
Это выдрано из раб проекта сервисной службы. Иногда запускать приходится программы, которые зависают, поэтому в данном примере это так. Если Вам это не надо - уберите. (См комментарий)
Стартовать процессы естественно в том порядке, который ВАМ нужен, пользуясь ::WaitForSingleObject(hProc, INFINITE) - бесконечное ожидание