Главная страница
    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.007 c
15-1255252664
Kerk
2009-10-11 13:17
2009.12.13
Украсть ящик водки, продать его, а полученные деньги пропить.


2-1256125568
Neket
2009-10-21 15:46
2009.12.13
Rename Section


3-1231178917
mahab
2009-01-05 21:08
2009.12.13
перемещение файлов БД


15-1255158192
vrem
2009-10-10 11:03
2009.12.13
Поздравляю с днём психического здоровья..


2-1256211022
snowkam
2009-10-22 15:30
2009.12.13
rак поменять разделитель





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский