Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Вниз

ждать завершения explorer   Найти похожие ветки 

 
Danger ©   (2008-10-28 07:21) [0]

По долгу службы пришлось переделывать проект тов. Trible (его программку http://delphimaster.net/view/4-1224767519/ ), но речь не о том. В общем, по сценарию программе надо запускать дочернюю программу и ждать ее завершения.

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 ©   (2008-10-28 07:25) [1]

> Или, как сказать explorer"у, что данный процесс не надо
> завершать при завершении сеанса (он завершится сам)

имхо, убивать родителя, а процесс оставлять не правильно, что за процесс порождает explorer? почему бы не дождаться его окончания не убивая его родителя?


 
Danger ©   (2008-10-28 07:33) [2]


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

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


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

Я бы не против, но explorer (в отличие от других дочерних программ) при завершении сеанса пользователя (своем завершении) пытается убить все окна, в том числе и окно своего родителя.


 
brother ©   (2008-10-28 08:16) [3]

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

странное поведение...


 
Danger ©   (2008-10-28 08:34) [4]


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

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


Как я понял, explorer рассылает всем topmost-окнам в системе запрос на завершение, и если окно не собирается закрываться и процесс завершаться (завершение не нужно в моем случае), он объявляет приложение зависшим и пишет "Программа не отвечает..."


 
Danger ©   (2008-10-28 09:59) [5]

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


 
tesseract ©   (2008-10-28 12:35) [6]


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


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


 
Danger ©   (2008-10-28 13:07) [7]


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


Это то же самое - для клиента терминала сервер подменяет стандартный шелл нашей программой... (прописывать ничего дополнительно не надо). Проблема была из-за особенности самого explorer"a. Скорее даже, это не ошибка и не проблема, а особенность поведения самого explorer"a - не любит он быть дочерним процессом для лоадера ;)


 
tesseract ©   (2008-10-28 21:39) [8]


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


Это особенности твоего непонимания работы explorer как shell. Ты сейчас на перелом пластырь накладываешь.


 
Danger ©   (2008-10-29 05:54) [9]


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

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

ЗЫ. Обсуждение ушло оффтопик, закрываем тему.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.005 c
2-1256714243
Zheksonz
2009-10-28 10:17
2009.12.13
Наполнение массива при объявлении


1-1228221714
Jorjia
2008-12-02 15:41
2009.12.13
ControlGrid - найти номер строки грида по расположенному на ней к


2-1256711630
petvv
2009-10-28 09:33
2009.12.13
Не пойму с запросом


2-1256117947
xyz
2009-10-21 13:39
2009.12.13
перебор выделенных строк в DBGridEh


15-1255088359
Игорь Шевченко
2009-10-09 15:39
2009.12.13
Сломали луну :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский