![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
Проблема в следующем.
Есть чужая программа, которая, когда запущена, управляется через собственный ActiveX. Мне нужно сделать сервис, который будет управлять чужой программой через этот ActiveX. Из обычной программы все работает. Моя программа пытается создать управляющий ActiveX, если он не создается, значит чужая программа не запущена, если создается, то чужая программа запущена и ей можно управлять. Но, проблема в том, что из под сервиса этот ActiveX недоступен, возвращается ошибка "Класс не зарегистрирован" независимо от того запущена или нет чужая программа. Фабрика, которая создает ActiveX зарегистрирована в HKEY_LOCAL_MACHINE\..., и она, не доступна. Сервис интерактивный. Мои собственные ActiveX, которые зарегистрированы то же в HKEY_LOCAL_MACHINE\... видит и работает с ними нормально. Как мне получить доступ к ActiveX, который управляет чужой программой из под сервиса? ЗЫЖ Вот код, который работает из под обычной программы:
-------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Felan, а сорцов этой ActiveX-ины естественно нету?
-------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
Rennigth, Ясен пень :(
Есть только сорцы моих ActiveXов... ну так они работают... Есть предположения, что это все из-за того, что она как-то хитро регистрируется, т.к. пока чужая прога не работает, ее реально нет... И есть подозрения, что все это происходит из-за того, что надо подключиться к правильной WindowsStation и Desktop... но вот со вчерашнего дня пытаюсь это дело сделать, ищу/читаю/пробую... Нифига не работает. Добавлено через 1 минуту и 24 секунды В чем может быть разница при регистрации ActiveX обычным способом через regSvr32, и при регистрации из запущенной программы... -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
Почитав про виндос станции и рабочие столы, стал пробовать, как подключиться. Ничего не помогло. ActiveX стал доступен только когда сервис запускается под учеткой в которой залогонин я, и в которой запускается программа. Появились такие вопросы: 1 Как настроить сервис на конкретную учетную запись под доменом? Я делал так: vSchService := CreateService( vSchSCManager, ServiceName, ServiceDisplayName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, StartType, SERVICE_ERROR_NORMAL, vModulePath, nil, nil, nil, 'domen\user', 'password'); Если не указывать домен, то он даже не устанавливается ("Учетная запись не существует, или неверный пароль"), если домен указать, то он не запускается. Но это в крайнем случае. 2 Какие условия должны выполняться для того, что бы сервис подключился к конкретной учетке и как это сделать автоматически? Т.е. что бы сервис сам ледил, если пользователь залогонился, то он входил с его учетной запиьсю? Может у кого есть пример, как все это сделать. Пробовал разные куски кода, которые меняют станцию и десктоп, но что-то ничего у меня не получилось, и, главное, я так и не понял, четко, что нужно сделать. -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
Felan, а не пробовал стартануть с парамертом lpServiceStartName NT AUTHORITY\LocalService
-------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
То же самое. "Класс не зарегистрирован".
-------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Добавлено через 8 минут и 19 секунд а где тут интерактивность? -------------------- Обижено школьников: 8 |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
а зачем ему интерактивность если сервис в принудительном порядке садится на станция\ стол пользователя Это сообщение отредактировал(а) Virtuals - 14.2.2008, 08:52 |
|||
|
||||
| Felan |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
Здесь нет. Изначально была, но потом я пришел к тому, что
и убрал интерактивность.
И при этом нужно подключиться к виндос станции и рабочему столу... Я только не пойму, как правильно определить нужную станцию и стол... Они же могут меняться для разных пользователей... при переключении пользователей... -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
||||
|
|||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
так оно и будет!, для станции пока не знаю, а для стола: descT:=GetThreadDesktop(ThreadId); |
|||
|
||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
Так разве это не будет дескто который ассоциирован с потоком сервиса? Т.е. не обязательно пользовательским?
-------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
чей ThreadId тот стол и получиш
тоесть находиш процесс пользователя, получаеш ид потока и в путь а вот со станцией заморочка... я пока не знаю как получить ее ЗЫ кстати есть очень большое подозрение что актив икс не заработает все равно, вроде както связано с реестром пользователя! разок тестил не прокатило, пошел другим путем, например можно свое приложение подсаживать в сессию пользователя (управляемое и контроллируемое сервисом) Это сообщение отредактировал(а) Virtuals - 14.2.2008, 19:16 |
|||
|
||||
| Felan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 2.8.2007 Где: Самара Репутация: 2 Всего: 7 |
Ну про станцию в MSDN нашел, что она всегда winsta0 будет. Только эта станция является интерактивной.
А вот как определить процесс пользователя? Сейчас у меня вот так работает:
Код нашел на форуме. Потом нашел оригинал в MSDN. Но все равно не совсем понимаю, как здесь получается ID потока пользователя. Ну да. Он и не работает, если сервис запускать от системной учетки а не от того пользователя в котором запускается приложение... ХОтя мои активиксы, которые существуют всегда работают нормально... Вот про сессии можешь рассказать? Как к ней подключиться? Похоже, что когда сервис логонится от имени пользователя он как раз и попадает в ту же сессию, т.к. в э том случае все работает... Хотелось бы сделать так, что бы это было автоматом, и что бы сервис не надо было настраивать... что бы он сам цеплялся куда надо... -------------------- // Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного. |
|||
|
||||
| Virtuals |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
OldDescUser := OpenInputDesktop(0, FALSE, MAXIMUM_ALLOWED); поменять на OldDescUser :=GetThreadDesktop(ThreadId); где ThreadId это Ид потока в процессе терминального пользователя получать скорее всего придется через CreateToolhelp32Snapshot снимок процессов Process32First, Process32Next перебор. далее отловим ProcessID, и можно будет получать ThreadId
у сервиса станция произвольная!!! у пользователей, сейчас гляну... |
||||
|
|||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
у пользователей (интерактивных, тоесть если использовать быстрое переключение в вин_хр) станция\стол
ВСЕГДА winsta0\default блин знаний нехватает.... одно из двух или мс используют какойто хитрый хук ушами или станция строится на основе сессии пользователя, тоесть дерево такое... сессия-станция-стол. отсюда... столы изолированны друг от друга в пределах станции станции изолированны друг от друга в пределах сессии все я сломал моск, пошел учить матчасть. |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |