Свой шелл в WINXP - засада...

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
gosha_zinow
Сообщения: 3
Зарегистрирован: 11 июн 2006, 15:07

ОС WINXP;
USER ограниченный;
Есть приложение, для этого пользователя являющееся шеллом;
Когда пользователь логинится - если шеллом эксплорер - то запуск в течение 2-3 сек, но если мое приложение, то загрузка (вернее отображение моего приложения)- 30(+- 5) сек. Причем мое приложение запускается тоже в течение 2-3 сек (поставил ему попищать при запуске ж ;) ); шаманство с переключением десктопов не помогло, причем если в эти 30 секнд создать свой десктоп и там запустится и туда переключится - тоже не помогает - такое ощущение , что таимаут, после которого обязательное переключение на дефолтный десктоп. Кто знает , F1,F1,F1,F1,F1,F1,F1,F1,F1!
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Никакого таймаута на неродной шелл нет. Скорее всего, дело в особенностях того самого шелла.
Не видя исходников, трудно судить, но вот что приходит на ум:
1) в процессе загрузки выполняются сетевые подключения?
2) отсутствует UpdateWindow() гл.окна?
gosha_zinow
Сообщения: 3
Зарегистрирован: 11 июн 2006, 15:07

Код: Выделить всё

 
  Application.Initialize;
  SetShellWindow(Application.Handle);
  initenvironment;//инит переменных
  Application.CreateForm(TSecShell, SecShell);
  UpdateWindow(Application.Handle);//попробовал добавить
  UpdateWindow(SecShell.Handle);//попробовал добавить
 beep(500,500);//бипает через 2-3 с , но окно закрыто логоном
  Application.Run;
UpdateWindow - судя по всему не решение проблемы
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Я бы не использовал undocumented API (SetShellWindow), т.е. нет четкого описания, что она делает.
Стандартный способ подмены шелла - через реестр, ключ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon, значение Shell.

Насчет UpdateWindow(), ну это была просто версия. Дельфовая форма не нуждается в подобных трюках, т.к. обычно создается сразу видимой. Но в любом случае, отрисовка произойдет не ранее вызова Application.Run.
Кстати, апдейтить Application.Handle бессмысленно, т.к. дельфовое Application window имеет преопределенный размер (0,0) (не путать с MainForm!) :)
И что значит "окно закрыто логоном"?
gosha_zinow
Сообщения: 3
Зарегистрирован: 11 июн 2006, 15:07

способ подмены шела использую стандартный , только не через hklm, а через hku -те для определенного юзера
SetShellWindow - без этого вызова winxphe при вызове winexec (которое может быть вызвано и не из моего приложения) - и иже с ней упорно запускает шеллом эксплорер. Ну а UpdateWindow(Application.Handle); - это просто танцы с бубном :)
"Закрыто логоном" - это значит что висит " окно приветствия и загрузка личных параметров"
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Так может это профиль долго грузится?
Насчет вызова winexec не понял: какое это имеет отношение к подмене шелла?
Ответить