Конференция "WinAPI" » ждать завершения explorer
 
  • Danger © (28.10.08 07:21) [0]
    По долгу службы пришлось переделывать проект тов. Trible (его программку http://pda.delphimaster.net/?id=1224767519&n=5 ), но речь не о том. В общем, по сценарию программе надо запускать дочернюю программу и ждать ее завершения.

    CreateProcess( nil, 'c:\myprogram.exe', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, SInfo, PInfo );
    if ( PInfo.hProcess > 0 ) then WaitForSingleObject( PInfo.hProcess, INFINITE );



    Все работает замечательно, но если в качестве дочерней программы использовать explorer.exe, то при завершении explorer пытается завершить создавший его процесс, и выдает "программа не отвечает...".

    Какое сообщение от explorer'a должно отрабатывать окно программы, чтобы завершиться корректно? Или, как сказать explorer'у, что данный процесс не надо завершать при завершении сеанса (он завершится сам) ?
  • brother © (28.10.08 07:25) [1]
    > Или, как сказать explorer'у, что данный процесс не надо
    > завершать при завершении сеанса (он завершится сам)

    имхо, убивать родителя, а процесс оставлять не правильно, что за процесс порождает explorer? почему бы не дождаться его окончания не убивая его родителя?
  • Danger © (28.10.08 07:33) [2]

    > brother ©   (28.10.08 07:25) [1]
    > имхо, убивать родителя, а процесс оставлять не правильно,
    >  что за процесс порождает explorer?

    Процесс - моя программа, по сути замена шеллу. В зависимости от обстоятельств, может давать пользователю нормальный шелл (explorer.exe). Есть необходимость ограничивать шелл для некоторых категорий пользователя, а для некоторых запускать explorer.


    > почему бы не дождаться его окончания не убивая его родителя?

    Я бы не против, но explorer (в отличие от других дочерних программ) при завершении сеанса пользователя (своем завершении) пытается убить все окна, в том числе и окно своего родителя.
  • brother © (28.10.08 08:16) [3]
    > пытается убить все окна, в том числе и окно своего родителя.

    странное поведение...
  • Danger © (28.10.08 08:34) [4]

    >> пытается убить все окна, в том числе и окно своего родителя.

    > brother ©   (28.10.08 08:16) [3]
    > странное поведение...


    Как я понял, explorer рассылает всем topmost-окнам в системе запрос на завершение, и если окно не собирается закрываться и процесс завершаться (завершение не нужно в моем случае), он объявляет приложение зависшим и пишет "Программа не отвечает..."
  • Danger © (28.10.08 09:59) [5]
    В общем, если explorer используется в качестве оболочки, достаточно запустить его процесс и сразу завершиться самому (не ожидая более завершения оболочки). Для всех остальных нужно ожидать. Проблема решена, правда не совсем изящным способом.
  • tesseract © (28.10.08 12:35) [6]

    > Проблема решена, правда не совсем изящным способом.


    Изящный способ, это изменение в реестре программы shell на свою потом логофф, повторить для explorer. Так тот-же свитчер от Aston работает.
  • Danger © (28.10.08 13:07) [7]

    > Изящный способ, это изменение в реестре программы shell
    > на свою потом логофф, повторить для explorer. Так тот-же
    > свитчер от Aston работает.


    Это то же самое - для клиента терминала сервер подменяет стандартный шелл нашей программой... (прописывать ничего дополнительно не надо). Проблема была из-за особенности самого explorer'a. Скорее даже, это не ошибка и не проблема, а особенность поведения самого explorer'a - не любит он быть дочерним процессом для лоадера ;)
  • tesseract © (28.10.08 21:39) [8]

    > Проблема была из-за особенности самого explorer'a.


    Это особенности твоего непонимания работы explorer как shell. Ты сейчас на перелом пластырь накладываешь.
  • Danger © (29.10.08 05:54) [9]

    > tesseract ©   (28.10.08 21:39) [8]
    > > Проблема была из-за особенности самого explorer'a.
    >
    > Это особенности твоего непонимания работы explorer как shell.
    >  Ты сейчас на перелом пластырь накладываешь.

    Нет, это просто особенность explorer'a. Сделай шеллом любую другую программу (хоть тоталл), и вопроса не возникнет. Насчет изменения в реестре программы shell - виндовс сама это делает для терминальных пользователей, если в настройках указано, какую программу запускать при входе. Самому прописывать не надо.

    ЗЫ. Обсуждение ушло оффтопик, закрываем тему.
 
Конференция "WinAPI" » ждать завершения explorer
Есть новые Нет новых   [134435   +33][b:0][p:0.001]