powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запуск приложения из виндовой службы
12 сообщений из 12, страница 1 из 1
Запуск приложения из виндовой службы
    #33437181
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в следующем:
Написал я виндовую службу. Она в определенное время создает поток,
который, в свою очередь должен запускать некоторое приложение.
При работе как консольнольное приложение отрабатывает на ура.
А когда запускаешь как виндовую службу - процесс в памяти висит, а окна нет. Кто знает в чем дело?
...
Рейтинг: 0 / 0
Запуск приложения из виндовой службы
    #33437192
Teem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трудно так ответить на абстрактный вопрос. Нужно класс окна зарегистрировать и проверить регистрацию. Тогда точно в процессе висеть не будет,а выдаст сообщение.
...
Рейтинг: 0 / 0
Запуск приложения из виндовой службы
    #33437217
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Более конкретно.
Я запускаю службу. Из в ней создается процесс:
Код: plaintext
1.
hThread = (HANDLE)_beginthreadex(NULL,  0 , &ThreadFunc, NULL,  0 , &threadID);

Код: plaintext
1.
2.
3.
4.
5.
unsigned __stdcall ThreadFunc(void* pArg)
{
	::spawnl(_P_WAIT, g_wcsFileName, NULL, NULL);
	return 0L;
}

Функция ThreadFunc отрабатывает. Процес g_wcsFileName висит в диспечере задач, а его окна нет. :-(
...
Рейтинг: 0 / 0
Запуск приложения из виндовой службы
    #33437227
KGP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_БалтикаДело в следующем:
Написал я виндовую службу ... процесс в памяти висит, а окна нет. Кто знает в чем дело?

У меня такое тоже было - службе в свойствах выставь следующее:
'Разрешить взаимодействовие с рабочим столом' (хоть вручную, хоть программно, когда регистришь её как сервис)
...
Рейтинг: 0 / 0
Запуск приложения из виндовой службы
    #33437242
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как прграммно?
В SERVICE_STATUS что ли надо что-то указать?
...
Рейтинг: 0 / 0
Запуск приложения из виндовой службы
    #33437350
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если пишете в Билдере, то просто в свойствах службы укажите Interactive = true. Если нет и лень копаться, то просто запустите
Код: plaintext
sc config myservicename type= interact
из CreateProcess'a. Если копаться не лень, то через ChangeServiceConfig .
...
Рейтинг: 0 / 0
Запуск приложения из виндовой службы
    #33437359
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И важный момент: интерактивными могут быть только те службы, которые принадлежат учетной записи System (она же Local Service) - все остальные неинтерактивны. А эта учетка несколько ограничена в правах (в основном это касается доступа по сети). Т.е. если вы запускаете службу от имени другого пользователя, то интерактивной она не будет, т.е. все окна и сообщения будут идти на другую Windows Station (грубо - на другой рабочий стол).
...
Рейтинг: 0 / 0
Запуск приложения из виндовой службы
    #33437362
Teem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_БалтикаБолее конкретно.
Я запускаю службу. Из в ней создается процесс:
Код: plaintext
1.
hThread = (HANDLE)_beginthreadex(NULL,  0 , &ThreadFunc, NULL,  0 , &threadID);

Код: plaintext
1.
2.
3.
4.
5.
unsigned __stdcall ThreadFunc(void* pArg)
{
	::spawnl(_P_WAIT, g_wcsFileName, NULL, NULL);
	return 0L;
}

Функция ThreadFunc отрабатывает. Процес g_wcsFileName висит в диспечере задач, а его окна нет. :-(
Тебе нужно взять ID окна запускаемого приложения и передать в функцию _beginthreadex. Попробуй использовать с параметром P_NOWAIT или вначале проверь не возвращает ли spawnl(_P_WAIT, g_wcsFileName, NULL, NULL); значение=-1. И еще есть ли такая функция как _beginthreadex или сам придумал?
...
Рейтинг: 0 / 0
Запуск приложения из виндовой службы
    #33437384
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не отработает это, т.к. в контексте текущего пользователя окон службы нет. А в контексте пользователя-владельца службы (по умолчанию - System) нет рабочего стола и т.п. текущего пользователя. И все это жестко контролируется и называется моногопользовательской средой - разве что lsass грохнуть и потом отменить неизбежный shutdown :)
...
Рейтинг: 0 / 0
Запуск приложения из виндовой службы
    #33437400
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, сейчас попробую.
Teem
И еще есть ли такая функция как _beginthreadex или сам придумал?

См. <process.h> в VC++. Советуют использовать именно ее. При использовании апишной ф-ции CreateThread другие библиотечные ф-ции глючить могут.
...
Рейтинг: 0 / 0
Запуск приложения из виндовой службы
    #33438954
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.
...
Рейтинг: 0 / 0
Запуск приложения из виндовой службы
    #33438991
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 установить.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запуск приложения из виндовой службы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]