Проблемма последовательного запуска внешних программ

Тема в разделе "WASM.WIN32", создана пользователем ZaikinM, 27 дек 2005.

  1. ZaikinM

    ZaikinM New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    16
    Добрый день. Проблемма у меня возникла следующая.

    Есть две взаимосвязанные программы, первая я так понимаю драйвер или что то в этом духе имеет расширение com, вторая обычный exe. Суть их работы это подписка файлов. В обычном режиме это работает так. Открывается коммандная строка, запускается программа с расширением com, которая грузит драйвер, при этом я просмотрел в процессах стартует ntwdm. Затем запускается вторая программа которой параметрами передаются имена файлов которые необходимо подписать. Теперь понадобилось автоматизировать этот пароцесс, сразу скажу варианты с написанием bat файлов меня не интересуют впринципе. Так вот как я непытался реализовать это програмно ничего неработает, при этом даже нестартует ntwdm. У меня уже практически опустились руки, ничего немогу понять и придумать. Буду благодарен вам за советы по решению этой проблеммы.
     
  2. Peshuha

    Peshuha New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2003
    Сообщения:
    41
    Составляешь цикл и вперед:

    // Запускаем процесс

    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 только там)

    Удачи
     
  3. ZaikinM

    ZaikinM New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    16
    Благодарен вам за ваш ответ. Но мне непонятны некоторые аспекты, как например зачем грохать процесс ? Стартовать процессы я так понимаю нужно последовательно в том порядке в котором идет вызов программ ?
     
  4. Peshuha

    Peshuha New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2003
    Сообщения:
    41
    Это выдрано из раб проекта сервисной службы. Иногда запускать приходится программы, которые зависают, поэтому в данном примере это так. Если Вам это не надо - уберите.

    (См комментарий)
     
  5. Peshuha

    Peshuha New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2003
    Сообщения:
    41
    Стартовать процессы естественно в том порядке, который ВАМ нужен, пользуясь ::WaitForSingleObject(hProc, INFINITE) - бесконечное ожидание