|
|
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
День добрый! Понадобилось тут иметь на сервере постоянно запущенным некоторое приложение ( чужое ), которое по-умолчанию интерактивно и требует авторизации в домене. Как известно многим, сервера обычно находятся в разлогиненном состоянии. Отсюда возникает проблема запуска приложения в режиме системного сервиса (под конкретным пользователем, а не под системой). Есть разные полезные утилиты типа srvany.exe из Microsoft Windows Resource Kit, позволяющие добиться требуемого эффекта. Проблема возникакет в следующем: именно в режиме сервиса приложение порой слетает, не оставляя никаких сообщений. При этом запуск его с помощью под залогиненым пользователем никаких ошибок не возникает. Отсюда вопрос - как можно следить за деятельностью приложения, запущенного в виде сервиса? Можно ли, например, отобразить его окно в терминале? Буду рад всем советам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 15:56 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
Вариант 1: прописать в services.msc действия на вываливание сервиса, если это сервис. Вариант 2: если это не сервис, а просто приложение запускается сервисом, то могу выслать свой вариант (сервис, при старте смотрит первую секцию файла sysexec.ini, запускает от своего имени перечисленные в секции программы и забывает о них. Через интервал времени, указанный в секции CheckInterval, запускаются приложения, перечисленные в секции CheckIfRunning, наличие их в памяти проверяется через тот же интервал. Если нет, то запускаются. При остановке сервиса из памяти выгружаются процессы, перечисленные в последней секции) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 16:13 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
Меня интересуют нюансы работы и отладки самого приложения, а не самописного аналога srvany, позволяющего запускать любую программу в качестве сервиса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 17:20 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
А, понял. Выставить интерактивность в свойствах сервиса не пробовали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 17:27 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
автор(под конкретным пользователем, а не под системой). несовместимо с авторА, понял. Выставить интерактивность в свойствах сервиса не пробовали? насколько я помню. Так что наверняка решение будет похоже на авторсамописного аналога srvany У меня такое было - там требовалось контолировать иногда, что именно пишется в окне сервиса. Делал свой сервис, из которого запускал приложение, хватал его stdout и перенаправлял в сокет, в любой момент можно было присоединиться к нему и наблюдать в реальном времени. С любого нужного рабочего места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 17:53 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
[quot --null У меня такое было - там требовалось контолировать иногда, что именно пишется в окне сервиса. Делал свой сервис, из которого запускал приложение, хватал его stdout и перенаправлял в сокет, в любой момент можно было присоединиться к нему и наблюдать в реальном времени. С любого нужного рабочего места.[/quot] STDOUT - это, конечно, хорошо. Только прога GUIшная и писана непойми кем. Живет криво. Пытался "шпионить" и посылать сообщения типа "показать окно"... Не помогает... Вот как бы ей хэндл родительского окна поменять... Реально такое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 18:02 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
е-мое, так вот Вы про что... я почему-то думал что это консоль. Ну не допер :-) Не думаю, что хендл родительского окна как-то поможет. Насколько я помню, у любого оконного приложения есть Window Station (понятие может быть знакомо разбирающимся с Terminal Server) - так вот тут надо копать в эту сторону imho. Ваши окна - в Вашей Window Station, а этого сервиса - явно в другой, надо как-то его на Вашу перенаправить. Все это IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 18:25 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
Про "Window Station" первый раз слышу. Где почитать что-нибудь не особо заумное? В Windows API на это не натыкался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 18:50 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
Win32 API велик и могуч, не всегда повод наткнуться есть. Можно начать с функций GetProcessWindowStation(), GetThreadDesktop() из MSDN и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 19:25 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
Это называется незаумное? :) Есть еще идеи? А пока посмотрим это... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 21:39 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
авторЭто называется незаумное? :) Есть еще идеи? Michael Puchkov ну у Вас и задача-то стоит, прямо скажем - нетривиальная. Я бы начал с попытки написания своего сервиса, кооторый мог бы отображать окно на обычный десктоп. А дальше уже с этой чужой прогой как-нибудь... Геморрой, конечно. Но если сделаете - будете монстром. Кстати, как-то видел в инете сорцы утилиты уделенного администрирования (типа PCAnywere) - их тоже поизучать интересно - могли бы помочь. Стоит ли игра свеч-решать Вам. Вообще Imho запускать GUI проги как сервис - это плохая идея. Например авторПроблема возникакет в следующем: именно в режиме сервиса приложение порой слетает, не оставляя никаких сообщений. При этом запуск его с помощью под залогиненым пользователем никаких ошибок не возникает. Вполне может статься, что это происходит, когда GUI порождает нечто, что не может выполняться в том "песвдодесктопе", в котором существует сервис. Какое-нибудь окно появляется, которое он не периваривает или событие какое-нибудь порождается. Хрен знает. Расскажете кстати, когда разберетесь :-) Вот Ваша задача авторПонадобилось тут иметь на сервере постоянно запущенным некоторое приложение (чужое), которое по-умолчанию интерактивно и требует авторизации в домене. Как известно многим, сервера обычно находятся в разлогиненном состоянии. Отсюда возникает проблема запуска приложения в режиме системного сервиса (под конкретным пользователем, а не под системой). У меня есть подобное приложение. Это GUI прога, которая управляет телефонной платой. Как я выхожу из ситуации? От идеи сервиса отказался, тем более что иногда надо в этом приложении не только наблюдать, но и кое-что щелкать в GUI. Я просто держу на виндовом сервере "вечную" постоянную терминальную сессию с этим приложением. Она обычно отсоединена вообще. Недостаток один - при перезагрузке сервис поднимался бы сам. Но перезагрузки очень редки, да и если бы это меня напрягало - что-нибудь бы придумал, наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 23:13 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
--null--Я бы начал с попытки написания своего сервиса, кооторый мог бы отображать окно на обычный десктоп. А дальше уже с этой чужой прогой как-нибудь... Геморрой, конечно. Но если сделаете - будете монстром. Кстати, как-то видел в инете сорцы утилиты уделенного администрирования (типа PCAnywere) - их тоже поизучать интересно - могли бы помочь. Стоит ли игра свеч-решать Вам. Да там и так написан свой сервис... Только на Java... Так что отображать окно он никуда не сможет, ибо работать с виндой на низком уровне не умеет. Писать не на Java не предлагать - ибо в этом есть необходимость. --null-- Например авторПроблема возникакет в следующем: именно в режиме сервиса приложение порой слетает, не оставляя никаких сообщений. При этом запуск его с помощью под залогиненым пользователем никаких ошибок не возникает. Вполне может статься, что это происходит, когда GUI порождает нечто, что не может выполняться в том "песвдодесктопе", в котором существует сервис. Какое-нибудь окно появляется, которое он не периваривает или событие какое-нибудь порождается. Хрен знает. Расскажете кстати, когда разберетесь :-) Самое забавное в том, что какое-то время всё работало. Потом перестало. Теперь пытаюсь понять, почему. --null-- Я просто держу на виндовом сервере "вечную" постоянную терминальную сессию с этим приложением. Она обычно отсоединена вообще. Ну в таком режиме оно и живет временно, пока с сервисом не разберемся. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 00:18 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
Michael PuchkovДень добрый! Понадобилось тут иметь на сервере постоянно запущенным некоторое приложение ( чужое ), которое по-умолчанию интерактивно и требует авторизации в домене. Как известно многим, сервера обычно находятся в разлогиненном состоянии. Отсюда возникает проблема запуска приложения в режиме системного сервиса (под конкретным пользователем, а не под системой). Есть разные полезные утилиты типа srvany.exe из Microsoft Windows Resource Kit, позволяющие добиться требуемого эффекта. Проблема возникакет в следующем: именно в режиме сервиса приложение порой слетает, не оставляя никаких сообщений. При этом запуск его с помощью под залогиненым пользователем никаких ошибок не возникает. Отсюда вопрос - как можно следить за деятельностью приложения, запущенного в виде сервиса ? Можно ли, например, отобразить его окно в терминале? Буду рад всем советам. 1) Script вроде такого net start |FIND "<myservice_name>" >nul if not ERRORLEVEL 1 GOTO OK net start <myservice_name> :OK в планировщик задач и расписание: запуск каждые 5 мин (5 сек?). А опосля спокойно пишешь свой сервис. 2) В свойствах "Восстановление" сервиса ставишь рестарт при аварийном завершении. ------------------------ Кстати и программы (не сервисы) проще запускать планировщиком, чем srvany.exe ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 06:46 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
aleks21) Script вроде такого .... 2) В свойствах "Восстановление" сервиса ставишь рестарт при аварийном завершении. ------------------------ Кстати и программы (не сервисы) проще запускать планировщиком, чем srvany.exe Читайте тред целиком прежде, чем отвечать. Требуется совсем не это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 07:45 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
Michael Puchkov aleks21) Script вроде такого .... 2) В свойствах "Восстановление" сервиса ставишь рестарт при аварийном завершении. ------------------------ Кстати и программы (не сервисы) проще запускать планировщиком, чем srvany.exe Читайте тред целиком прежде, чем отвечать. Требуется совсем не это. Каков вопрос - таков ответ. ------------------ Ты сам то свой вопрос читал? >>Отсюда вопрос - как можно следить за деятельностью приложения, запущенного в виде сервиса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 08:08 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
aleks2Ты сам то свой вопрос читал? >>Отсюда вопрос - как можно следить за деятельностью приложения, запущенного в виде сервиса? Мне надо следить за деятельностью а не за состоянием . А Вы предлагаете второй вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 08:45 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
Michael PuchkovМне надо следить за деятельностью а не за состоянием . А Вы предлагаете второй вариант. - между делом: если дверь толкают вместо того, чтобы тянуть, значит, у двери плохой дизайн. Если пост понимают неправильно, значит, в нем неверно расставлены акценты. По делу: можно прицепиться к процессу а) отладчиком б) просто вести наблюдение за оpen handles (Open Files, Registry, Pipes, etc.) и окна. Во втором варианте можно обойтись дешево и сердито: запускаем две копии process explorer'a (www.sysinternals.com), выделяем в каждом наш (ваш :) ) процесс, затем в первом менеджере отображаем handles, во втором - dlls. Попутно запускаем что-то вроде Spy++ с автообновлением (скажем, я пользуюсь демо-программой из дистрибутива Delphi). Все аккуратно расставляем на экране, (подбираем разрешение побольше) и запускаем утилиту снятия изображения с монитора в файл (идеально что-то вроде HyperCam, пишет в avi, а если комп слабоват, то можно просто настроить снятие скриншота через заданный интервал. В результате должны получить некоторую картину по окнам, dll и open handles (файлы, ветки реестра, мутексы, др.) в момент вываливания процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 09:14 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
автори запускаем утилиту снятия изображения с монитора в файл дык в этой ситуации изображения <проги> особенно и не будет. Я бы так сформулировал этот топик: Можно ли в Windows увидеть окно GUI приложения, запущенного как сервис Вопрос интересный. Остальное все - шелуха и детали. Imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 11:52 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
--null-- автори запускаем утилиту снятия изображения с монитора в файл дык в этой ситуации изображения <проги> особенно и не будет. Я бы так сформулировал этот топик: Можно ли в Windows увидеть окно GUI приложения, запущенного как сервис Вопрос интересный. Остальное все - шелуха и детали. Imho А автор все-таки прав - внимательнее надо читать :) Я предлагаю снимать не то, чего нет, а сведения о процессе, отображаемые менеджерами процессов и window enumerators. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 12:05 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
--null-- Можно ли в Windows увидеть окно GUI приложения, запущенного как сервис - такой вариант: запускаем (от имени Local System) программу снятия скриншотов через заданные промежутки времени с рабочего стола пользователя Local System, на котором запущено GUI-приложение. И смотрим :) Щас проверю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 12:12 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
rrrrrrrrrrА автор все-таки прав - внимательнее надо читать :) Я предлагаю снимать не то, чего нет, а сведения о процессе, отображаемые менеджерами процессов и window enumerators. Этого порой недостаточно :( К тому-же те "шпионы", которые я пока нашел, не видят процессов под другими пользователями. Жаль, что Process Explorer не позволяет сохранять историю изменений... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 12:14 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
Похоже, Windows не тратит сил на полноценный Window Station неинтерактивного пользователя: запустил cmd и калькулятор от системы, затем снимал скриншоты - белый экран :( Скрины брал стандартно, GetDesktopWindow, GetDC, ..., BitBlt. ntfilemon, ntregmon - может, они что прояснят? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 12:32 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
авторПохоже, Windows не тратит сил на полноценный Window Station неинтерактивного пользователя rrrrrrrrrr да, думаю что-то типа того! Я тоже про это собственно :-) Michael Puchkov если прога на Java (как я понял) - exceptions в ней ведь в консоль бросаются, вдруг это чем поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 13:13 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
--null--Michael Puchkov если прога на Java (как я понял) - exceptions в ней ведь в консоль бросаются, вдруг это чем поможет.Java-прога запускает неJava-прогу... А уже та глючит :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 13:19 |
|
||
|
Проблемы с сервисом
|
|||
|---|---|---|---|
|
#18+
Запоздалый положительный ответ на вопрос (в смысле: да, можно сделать интерактивным процесс, работающий по сети): Resource Kit 2kSrvany Notes -------------------------------------------------------------------------------- Running from the Working Directory If Srvany fails to start an application, try specifying the directory containing the application as the working directory. As Srvany can run under an account that is different from the user who is currently logged on, environment variables might be set differently, and, as a result, the system might be unable to find a required DLL. Running the application from its root directory might solve the problem. Interactivity versus Network Access Due to a restriction enforced by Windows on services, the application can either be interactive (for example, it might read keyboard input) or have network access, but not both at the same time. If you know which servers your interactive service application needs to connect to, it is possible to configure these servers (or selected shares on them) to allow your service (running under the LocalSystem account) to gain access to them. To allow LocalSystem services on any computer in the domain to connect to a specific share on a server, use a registry editor to add the name of that share in the following registry location: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ LanmanServer\Parameters\NullSessionShares If LocalSystem services also need to gain access to named pipes on that server, add the named pipes in the following registry location: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ LanmanServer\Parameters\NullSessionPipes To allow access to all shares and pipes on the server by LocalSystem services, add the following RestrictNullSessAccess entry, with a data type of DWORD and a value of 0: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ LanmanServer\Parameters\RestrictNullSessAccess Note Adding this entry to the registry allows everyone in the domain to gain access to the server. Programming Considerations With Win32 graphical applications, all top-level windows receive the WM_QUERYENDSESSION and WM_ENDSESSION messages when the user logs off. Some Win32 applications quit when they receive these messages. In order for a Win32 application to keep running when a user logs off, the default Windows procedure should be called when these messages are received. Win32 character-based applications receive a CTRL_LOGOFF_EVENT event from the console when the user logs off. If your character-based application registers a console event handler (using SetConsoleCtrlHandler), it must ignore CTRL_LOGOFF_EVENT in order to keep running. Presentation Manager Applications When you use Srvany with Presentation Manager applications, special configuration instructions apply. Consult the Readme.wri file shipped on Disk#1 of the Windows NT Add-On Subsystem for Presentation Manager, version 3.51. Presentation Manager is a Microsoft add-on product that allows you to run 16-bit Presentation Manager 1.x applications in addition to the OS/2 character-mode applications supported by the Windows OS/2 subsystem. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2006, 11:21 |
|
||
|
|

start [/forum/topic.php?fid=26&msg=33383945&tid=1511062]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
143ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 457ms |

| 0 / 0 |
