|
|
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
Дело в следующем: Написал я виндовую службу. Она в определенное время создает поток, который, в свою очередь должен запускать некоторое приложение. При работе как консольнольное приложение отрабатывает на ура. А когда запускаешь как виндовую службу - процесс в памяти висит, а окна нет. Кто знает в чем дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 09:49 |
|
||
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
Трудно так ответить на абстрактный вопрос. Нужно класс окна зарегистрировать и проверить регистрацию. Тогда точно в процессе висеть не будет,а выдаст сообщение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 09:53 |
|
||
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
Более конкретно. Я запускаю службу. Из в ней создается процесс: Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. Функция ThreadFunc отрабатывает. Процес g_wcsFileName висит в диспечере задач, а его окна нет. :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 10:06 |
|
||
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
_БалтикаДело в следующем: Написал я виндовую службу ... процесс в памяти висит, а окна нет. Кто знает в чем дело? У меня такое тоже было - службе в свойствах выставь следующее: 'Разрешить взаимодействовие с рабочим столом' (хоть вручную, хоть программно, когда регистришь её как сервис) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 10:10 |
|
||
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
А как прграммно? В SERVICE_STATUS что ли надо что-то указать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 10:18 |
|
||
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
Если пишете в Билдере, то просто в свойствах службы укажите Interactive = true. Если нет и лень копаться, то просто запустите Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 10:52 |
|
||
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
И важный момент: интерактивными могут быть только те службы, которые принадлежат учетной записи System (она же Local Service) - все остальные неинтерактивны. А эта учетка несколько ограничена в правах (в основном это касается доступа по сети). Т.е. если вы запускаете службу от имени другого пользователя, то интерактивной она не будет, т.е. все окна и сообщения будут идти на другую Windows Station (грубо - на другой рабочий стол). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 10:55 |
|
||
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
_БалтикаБолее конкретно. Я запускаю службу. Из в ней создается процесс: Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. Функция ThreadFunc отрабатывает. Процес g_wcsFileName висит в диспечере задач, а его окна нет. :-( Тебе нужно взять ID окна запускаемого приложения и передать в функцию _beginthreadex. Попробуй использовать с параметром P_NOWAIT или вначале проверь не возвращает ли spawnl(_P_WAIT, g_wcsFileName, NULL, NULL); значение=-1. И еще есть ли такая функция как _beginthreadex или сам придумал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 10:55 |
|
||
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
Не отработает это, т.к. в контексте текущего пользователя окон службы нет. А в контексте пользователя-владельца службы (по умолчанию - System) нет рабочего стола и т.п. текущего пользователя. И все это жестко контролируется и называется моногопользовательской средой - разве что lsass грохнуть и потом отменить неизбежный shutdown :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 11:00 |
|
||
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
Спасибо, сейчас попробую. Teem И еще есть ли такая функция как _beginthreadex или сам придумал? См. <process.h> в VC++. Советуют использовать именно ее. При использовании апишной ф-ции CreateThread другие библиотечные ф-ции глючить могут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 11:04 |
|
||
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
_БалтикаСм. <process.h> в VC++. Советуют использовать именно ее. При использовании апишной ф-ции CreateThread другие библиотечные ф-ции глючить могут. программно я лично пользовался тем, что при регистрации вызывая функцию SC_HANDLE CreateService( SC_HANDLE hSCManager, LPCTSTR lpServiceName, LPCTSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCTSTR lpBinaryPathName, LPCTSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCTSTR lpDependencies, LPCTSTR lpServiceStartName, LPCTSTR lpPassword ); учитывал авторdwServiceType [in] Service types. This parameter can be one of the following values. Type Meaning SERVICE_FILE_SYSTEM_DRIVER File system driver service. SERVICE_KERNEL_DRIVER Driver service. SERVICE_WIN32_OWN_PROCESS Service that runs in its own process. SERVICE_WIN32_SHARE_PROCESS Service that shares a process with other services. If you specify either SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS, and the service is running in the context of the LocalSystem account, you can also specify the following type. Type Meaning SERVICE_INTERACTIVE_PROCESS The service can interact with the desktop. For more information, see Interactive Services. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 17:40 |
|
||
|
Запуск приложения из виндовой службы
|
|||
|---|---|---|---|
|
#18+
KGP _БалтикаСм. <process.h> в VC++. Советуют использовать именно ее. При использовании апишной ф-ции CreateThread другие библиотечные ф-ции глючить могут. программно я лично пользовался тем, что при регистрации вызывая функцию SC_HANDLE CreateService( SC_HANDLE hSCManager, LPCTSTR lpServiceName, LPCTSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCTSTR lpBinaryPathName, LPCTSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCTSTR lpDependencies, LPCTSTR lpServiceStartName, LPCTSTR lpPassword ); учитывал авторdwServiceType [in] Service types. This parameter can be one of the following values. Type Meaning SERVICE_FILE_SYSTEM_DRIVER File system driver service. SERVICE_KERNEL_DRIVER Driver service. SERVICE_WIN32_OWN_PROCESS Service that runs in its own process. SERVICE_WIN32_SHARE_PROCESS Service that shares a process with other services. If you specify either SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS, and the service is running in the context of the LocalSystem account, you can also specify the following type. Type Meaning SERVICE_INTERACTIVE_PROCESS The service can interact with the desktop. For more information, see Interactive Services. Спасибо, все действительно работает если SERVICE_INTERACTIVE_PROCESS установить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2005, 17:50 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=380&tid=2032296]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
21ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 360ms |

| 0 / 0 |
