Запуск GUI приложения из под сервиса
От: Яхненко  
Дата: 15.10.05 22:37
Оценка:
Привет всем,
Этот вопрос уже поднимался здесь, но к сожалению не все понятео мне. Я не из C++, я из xBase++
Я написал (пишу) в xBase++ сервис по типу Windows Scheduler, но с другими возможностями адоптированными для запуска приложений использующихся в нашей системе. Все наши прилодения xBase GUI и к тому же не все умеют работать с UNC — это как пережитки прошлого.
Сервис мы собираемся запускать из под административного аккаунта или имеющего эти полномочия. Юзера имя и пароль мы тоже знаем. И вот надо запустить приложение. Единственное условие чтобы видеть его на десктопе (а то залипнет или чет там еще) и никто ничего не узнает. Да и если залипло, я буду хотеть его убить, т.е. TerminateProcess после какого-то определяемого для каждого приложения времени ожидания завершения.
Я пытался для этих целей использовать Windows Scheduler. Я знаю что у Scheduler есть COM API, но COM в xBase++ кривой и имеет существенные ограничения в используемых нами версиях. Я подумал о schtasks.exe, но к сожалению он только под XP, а мне без Win2K никуды. По сему мне нужна C++ DLL функия, куда я могу послать параметры с типом DWORD и Char* и все
Народ, мож кто уже имеет готовые куски, или знает где они лежат- pls, пиво гарантируется только в часовой зоне ET GMT-5.00

Заранее благодарен,

Владимир


P.S. Компилировать и строить dll на с++ я уже научился
Re: Запуск GUI приложения из под сервиса
От: Аноним  
Дата: 16.10.05 11:16
Оценка:
Здравствуйте, Яхненко, Вы писали:

Я>Привет всем,

Я>Этот вопрос уже поднимался здесь, но к сожалению не все понятео мне. Я не из C++, я из xBase++
Я>Я написал (пишу) в xBase++ сервис по типу Windows Scheduler, но с другими возможностями адоптированными для запуска приложений использующихся в нашей системе. Все наши прилодения xBase GUI и к тому же не все умеют работать с UNC — это как пережитки прошлого.
Я>Сервис мы собираемся запускать из под административного аккаунта или имеющего эти полномочия. Юзера имя и пароль мы тоже знаем. И вот надо запустить приложение. Единственное условие чтобы видеть его на десктопе (а то залипнет или чет там еще) и никто ничего не узнает. Да и если залипло, я буду хотеть его убить, т.е. TerminateProcess после какого-то определяемого для каждого приложения времени ожидания завершения.
Я>Я пытался для этих целей использовать Windows Scheduler. Я знаю что у Scheduler есть COM API, но COM в xBase++ кривой и имеет существенные ограничения в используемых нами версиях. Я подумал о schtasks.exe, но к сожалению он только под XP, а мне без Win2K никуды. По сему мне нужна C++ DLL функия, куда я могу послать параметры с типом DWORD и Char* и все
Я>Народ, мож кто уже имеет готовые куски, или знает где они лежат- pls, пиво гарантируется только в часовой зоне ET GMT-5.00

Я>Заранее благодарен,


Я>Владимир



Я>P.S. Компилировать и строить dll на с++ я уже научился


Allow service to interact with desktop
Re[2]: Запуск GUI приложения из под сервиса
От: I-Vladimir  
Дата: 16.10.05 13:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Яхненко, Вы писали:


Я>>Привет всем,

Я>>Этот вопрос уже поднимался здесь, но к сожалению не все понятео мне. Я не из C++, я из xBase++
Я>>Я написал (пишу) в xBase++ сервис по типу Windows Scheduler, но с другими возможностями адоптированными для запуска приложений использующихся в нашей системе. Все наши прилодения xBase GUI и к тому же не все умеют работать с UNC — это как пережитки прошлого.
Я>>Сервис мы собираемся запускать из под административного аккаунта или имеющего эти полномочия. Юзера имя и пароль мы тоже знаем. И вот надо запустить приложение. Единственное условие чтобы видеть его на десктопе (а то залипнет или чет там еще) и никто ничего не узнает. Да и если залипло, я буду хотеть его убить, т.е. TerminateProcess после какого-то определяемого для каждого приложения времени ожидания завершения.
Я>>Я пытался для этих целей использовать Windows Scheduler. Я знаю что у Scheduler есть COM API, но COM в xBase++ кривой и имеет существенные ограничения в используемых нами версиях. Я подумал о schtasks.exe, но к сожалению он только под XP, а мне без Win2K никуды. По сему мне нужна C++ DLL функия, куда я могу послать параметры с типом DWORD и Char* и все
Я>>Народ, мож кто уже имеет готовые куски, или знает где они лежат- pls, пиво гарантируется только в часовой зоне ET GMT-5.00

Я>>Заранее благодарен,


Я>>Владимир



Я>>P.S. Компилировать и строить dll на с++ я уже научился


А>Allow service to interact with desktop


Да, но при этом мой сервис будет использовать LocalSystem account, что не есть приемлимо и при этом мой сервис создает пустое консольное окно, что не есть perfect

Что нужно ли в моем случае использовать CreateProcess или CreateProcessAsUser?
Можно ли использовать runas.exe для этих целей с какими то параметрами?

Спасибо.
Владимир
Re[3]: Запуск GUI приложения из под сервиса
От: RST_Angellab  
Дата: 17.10.05 07:20
Оценка:
Allow Interact with desktop можно делать только для LocalSystem. Кстати она не имеет права лезть в сеть.
Используй имперсонацию.
Т.е. запускаешь сервис под LocalSystem , из него порождаешь процесс с необходимыми тебе Credentials.
если система win2k/winxp можешь посмотреть runas сервис.
Re[4]: Запуск GUI приложения из под сервиса
От: Andrew S Россия http://alchemy-lab.com
Дата: 17.10.05 10:08
Оценка:
RST>Allow Interact with desktop можно делать только для LocalSystem.

Это не так. Примеры разрешения доступа к интерактивному десктопу для сервиса, запущенного не из под SYSTEM, тут уже приводились не раз. Используйте поиск.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: Запуск GUI приложения из под сервиса
От: acronim  
Дата: 17.10.05 13:54
Оценка:
На машинке может быть запущено несколько сессий (ВинХП или сервер с терминалами)
Если интерактивно работают несколько пользователей, то кому отображать диалог?
Если использовать флаг интерактивность, то диалог появится на рабочем столе того, кто на нулевой сесии
(админ на первой сесии запустил сервис, а морда отобразилась у гося на нулевой сесии. Вот так..)
Советею запускать второе приложение на нужной сесии для интерактивного взаимодействия с пользователем
Все должно быть просто
Re[2]: Запуск GUI приложения из под сервиса
От: I-Vladimir  
Дата: 17.10.05 18:14
Оценка:
Здравствуйте, acronim, Вы писали:

A>На машинке может быть запущено несколько сессий (ВинХП или сервер с терминалами)

A>Если интерактивно работают несколько пользователей, то кому отображать диалог?
A>Если использовать флаг интерактивность, то диалог появится на рабочем столе того, кто на нулевой сесии
A>(админ на первой сесии запустил сервис, а морда отобразилась у гося на нулевой сесии. Вот так..)
A>Советею запускать второе приложение на нужной сесии для интерактивного взаимодействия с пользователем

Но если я Админ, запустил сервис из своего аккаунта, у меня есть все права. Мне нужен только десктоп. Как мне запускать через CreateProcess() или CreateProcessAsUser() ??
Я пробовал MSDN'овский пример, где сперва логинится юзер затем вешаются его права на "winsta0\default"desktop в параметрах STARTUPINFO. Получил ошибку 1314 — ERROR_PRIVILEGE_NOT_HELD на ХР.
Можно ли как то поменять поставить lpDesktop так чтобы использовать уже существующий админовский десктоп или уж ладно NULL когда этот десктоп недоступен?

Спасибо,
Владимир
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.