WaitForInputIdle для консольного приложения

Тема в разделе "WASM.WIN32", создана пользователем DeRekX, 13 мар 2009.

  1. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Добрый день, проблема следующая:

    Необходимо отследить, пока приложение полностью загрузится.

    Для GUI приложений, работает отлично:
    Код (Text):
    1. CreateProcess(..);
    2. WaitForInputIdle( .. , INFINITE );
    3. // приложение успешно загрузилось
    Но:
    А какой возможен вариант для консольных приложений \ приложений без очереди сообщений, помимо Sleep(3000) ?

    Заранее спасибо.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    При каком условии считать что приложение "загрузилось" ?
     
  3. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Clerk
    хороший вопрос, поясню.

    После запуска процесса, происходит переименование этого процесса.
    Если не подождать, то в списке процессов будет переименованный процесс, а я хочу имя старого.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    После возврата из NtCreateProcess(Ex) он уже будет создан, другое когда юзермодный загрузчик открывает файл на диске.
     
  5. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Clerk
    ответ не понял, ещё поясню

    После запуска процесса, происходит переименование файла на диске, соответствующего процессу.

    Если не подождать, то в списке процессов будет имя, переименованного процесса (новое имя файла), а я хочу имя старого файла.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Поясню. Процесс создаётся сервисом NtCreateProcess(Ex). Ждать ничего не нужно.
     
  7. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    Clerk
    как это ждать не надо.

    CreateProcess("c\\console.exe");
    Rename("c\\console.exe","c\\qconsole.exe", ..)

    taskmgr показывает qconsole а надо console
    Если добавить WaitForInputIdle( .. , INFINITE ); -- т.е. ожидание
    то проблема решается только для GUI программ, (taskmgr показывает console).

    Для консольных эта проблема не решена.
    можно использовать Sleep(), но есть ли методы грамотнее ?
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    CREATE_SUSPENDED.
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    могу сделать вывод что ты знаешь момент запуска -> что мешает посмотреть в параметрах CreateProcess?
    если не знаешь момент запуска тогда не понятен вопрос
     
  10. DeRekX

    DeRekX New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2007
    Сообщения:
    98
    Адрес:
    Russia
    момент запуска знаю.
    CREATE_SUSPENDED не помогает или я что-то не правильно делаю