Установка приложения в качестве службы
Помимо выполнения в качестве исполняемого файла локального сервера (EXE), COM-объект также может упаковать себя для запуска в качестве приложения-службы при активации локальным или удаленным клиентом. Службы поддерживают множество полезных и интегрированных функций администрирования пользовательского интерфейса, включая локальный и удаленный запуск, остановку, приостановку и перезапуск, а также возможность установить сервер для запуска под определенной учетной записью пользователя и оконной станцией.
Объект, написанный как служба, устанавливается для использования COM путем установки значения LocalService под ключом AppID и выполнения стандартной установки службы.
Классы также можно настроить для выполнения под определенной учетной записью пользователя при активации удаленным клиентом без записи в качестве приложения-службы. Для этого класс устанавливает имя пользователя и пароль, которые будут использоваться при запуске SCM процесса локального сервера.
Если класс настроен таким образом, вызовы CoRegisterClassObject с этим ИДЕНТИФИКАТОРом CLSID завершатся ошибкой, если процесс не был запущен COM от имени фактического запроса активации. Другими словами, классы, настроенные для запуска от имени определенного пользователя, не могут быть зарегистрированы под каким-либо другим удостоверением.
Имя пользователя берется из имени запуска от имени под ключом APPID класса. Если имя пользователя — «Интерактивный пользователь», код класса выполняется в контексте безопасности текущего пользователя, выполнившего вход в систему, и подключается к станции интерактивного окна.
В противном случае пароль извлекается из скрытой части реестра, доступной только администраторам компьютера и системы. Затем имя пользователя и пароль используются для создания сеанса входа, в котором выполняется код класса. При запуске таким образом код класса выполняется с собственным рабочим столом и window-station и не совместно использует дескрипторы окон, буфер обмена или другие элементы пользовательского интерфейса с интерактивным пользователем или другими классами, работающими в других учетных записях пользователей.
Сервер, зарегистрированный с помощью LocalService или запуска от имени , может зарегистрировать объект в таблице выполняющихся объектов, чтобы разрешить любому клиенту подключиться к нему. Для этого вызов сервера IRunningObjectTable::Register должен установить флаг ROTFLAGS_ALLOWANYCLIENT. Параметр этого бита сервера должен иметь имя исполняемого файла в разделе AppID реестра, который ссылается на AppID для исполняемого файла. Сервер «активировать как активатор» (не зарегистрированный как LocalService или RunAs) может не зарегистрировать объект с этим флагом.
Какой командой можно запустить обычное приложение, как службу Windows?
Как создать, зарегистрировать новую службу Windows из обычного приложения и поставить его в автозагрузку?
У этого приложения будут права администратора?
- Вопрос задан более трёх лет назад
- 447 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 3
Cloud infrastructure, monitoring engineer. SRE
Powershell
get-help new-service -examples
CMD
C:\WINDOWS\system32\sc.exe create /?
еще
nssm.cc
Как поставить в автозагрузку сервис? поставить ему автоматический запуск.
Какие права будут у сервиса? такие, какие у учетной записи, под которой вы будете его запускать.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
разработка программного обеспечения
Вообще, можно поступить вот так:
- Ваше приложение должно быть windows службой
- Оно должно содержать в себе установщик (там есть такой компонент)
А затем, можно его установить через
ManagedInstallerClass.InstallHelper(new string[] < "absolute\path\to\assembly.exe" >);
UPD: yellowmew указал общий способ, мой относится только к windows-службам, написанным на .NET
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
Признаться, я не заметил тэга C#
Наверное, ваш ответ будет более корректным, если конечно автор не добавит подробностей )
Обычное приложение никак. Если Вы пишете приложение, то в среде разработки, которую Вы используете должен быть тип приложения «Сервис». Должны обрабатываться события и команды (Как минимум Windows должен узнать, что сервис успешно запустился, а не завис).
Сервис — запускается из под системы, а большинство сегодняшних приложений имеет Gui. То есть оно не будет отображаться. Должен быть вариант работы приложения в фоне.
Как правило службы из консоли можно установить запусти с параметром /install
/uninstall соответственно деинсталляция.
Вы можете попробовать запустить приложение через планировщик (можно выбрать когда запустить и от какого имени), добавив туда задание, по сути будет тоже самое, приложение появится в процессах, не будет лишь возможности его остановить/перезапустить.
При подготовке материала использовались источники:
https://learn.microsoft.com/ru-ru/windows/win32/com/installing-as-a-service-application
https://qna.habr.com/q/367760