Запускать программу как сервис

Как запустить приложение как службу. Запуск любого приложения Windows XP как сервиса.

Один из самых часто встречающихся вопросов, связанных с Windows XP — это вопрос о возможности запуска программ как сервиса, что дает определенные преимущества.
Сделать это не так трудно, как считается, для этого необходимо скачать определенный пакет утилит, называемый srvany. пакет состоит из двух утилит INSTSRV.EXE и SRVANY.EXE.
Взять их можно здесь: img.nnow.ru/data/myupload/0/841/841675/srvany.zip

Для начала необходимо скопировать эти файлы в системную директорию %windir%/system32. Затем необходимо запустить файл SRVANY.EXE из командной строки, используя следующий синтаксис: «INSTSRV ServiceName %windir%/srvany.exe», Где ServiceName — придуманное имя сервиса. Если всё сделано правильно, то появится сообщение, подтверждающее успешное создание сервиса (The service was successfuly added).

Теперь зайдите в Администрирование — Службы (Services). Находите только что созданную службу, двойной клик вызывает свойства сервиса. На первой вкладке можно выбрать параметры запуска — Automatic (автоматически при загрузке компьютера), Manual (Вручную) и Disabled (отключено). Для работы созданного сервиса в отдельном окне необходимо отметить на второй вкладке (Вход в систему) пункт Allow Service to Interact with Desktop (Разрешить взаимодействие с рабочим столом). Пока всё.

Программа загрузки запускает службы (решение)

Следующим шагом является редактирование реестра. Запускаем редактор реестра Regedit. Шагаем к ветви HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices и находим имя сервиса здесь. Создаем раздел Paremeters и в этом разделе прописываем путь к программе, которую мы хотим запустить, следующим образом: Строковой параметр: Application значение — путь к программе, которую мы будем запускать как сервис.

Запустить сервис, если он не отключен, можно несколькими способами, во-первых через командную строку: Net Start ServiceName — где SеrviceName — имя Вашего сервиса. И другим способом — непосредственно через апплет административной панели — службы.

Чтобы удалить сервис, его сначала необходимо остановить: net stop ServiceName, затем опять же в коммандной строке выполнить команду INSTSRV ServiceName remove.

Источник: www.makak.ru

Запуск приложения как сервис Windows

Бывают случаи, когда добавления приложения в автозагрузку не достаточно и нужно приложение сделать сервисом Windows. Такие ситуации связаны с запуском приложений, которые нужно запускать при старте компьютера, но не важно от какого пользователя или еще до входа пользователя в систему.

Есть множество способов сделать приложение сервисом, но я бы хотел остановиться на одном очень простом решении — утилита srvinstw.
Крайне простая утилита, которая поможет установить приложение как сервис в системе от имени system или иного пользователя или удалить ранее созданный сервис. Обратите внимание, что утилита требует наличия прав полного администратора Windows Vista/7/8, т.е. запускать ее надо правой кнопкой мыши — от имени администратора.

Читайте также:
Sony vegas pro обзор программы

Как запустить службу аудио, которая не запущена

Скачать srvinstw можно с нашего сайта.

Источник: sershe.ru

Службы Windows

Одним из важнейших компонентов ОС Windows являются службы. Фактически это отдельные приложения, которые не имеют графического интерфейса и которые выполняют различные задачи в фоновом режиме. Службы могут быть запущены при старте операционной системы, так и в любой другой момент работы пользователя. Распространенным примером служб являются различные веб-серверы, которые в фоновом режиме прослушивают определенный порт на наличие подключений, и если подключения имеются, то взаимодействуют с ними. Это могут быть также различные вспомогательные сервисы обновлений для других установленных программ, которые обращаются к серверу, чтобы узнать, есть ли новая версия приложения. В общем то мы можем открыть панель служб и сами увидеть все установленные и запущенные службы:

Создание службы Windows в C#

Рассмотрим, как создавать свои службы в C#. В качестве реализуемой задачи выберем наблюдение за изменениями в определенной папке в файловой системе. Теперь создадим для ее выполнения службу.

Вначале создадим новый проект, который будет иметь тип Windows Service . Назовем проект FileWatcherService:

Проект Windows Service в Visual Studio 2015

После этого Visual Studio генерирует проект, который имеет все необходимое. Хотя в принципе нам необязательно выбирать именно этот тип проекта, можно было бы создать проект библиотеки классов, и затем в нем определить все необходимые классы.

Итак, новый проект выглядит следующим образом:

Здесь также есть файл Program.cs и есть собственно узел службы Service1.cs .

Служба представляет обычное приложение, но она не запускаетс сама по себе. Все вызовы и обращения к ней проходят через менеджер управления службами (Service Control Manager или SCM). Когда служба запускается автоматически при старте системы или вручную, то SCM обращается к методу Main в классе Program:

static class Program < static void Main() < ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] < new Service1() >; ServiceBase.Run(ServicesToRun); > >

Метод Main по умолчанию определен таким образом, чтобы запускать сразу несколько служб, которые определены в массиве ServicesToRun. Однако по умолчанию проект содержит только одну службу Service1. Сам запуск производится с помощью метода Run: ServiceBase.Run(ServicesToRun) .

Сама запускаемая служба представлена узлом Service1.cs. Однако на самом деле это не простой файл кода. Если мы откроем этот узел, то увидим в нем файл дизайнера службы Service1.Designer.cs и класс Service1.

Читайте также:
Mestrenova как пользоваться программой

Класс Service1 собственно представляет службу. По умолчанию он имеет следующий код:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks; namespace FileWatcherService < public partial class Service1 : ServiceBase < public Service1() < InitializeComponent(); >protected override void OnStart(string[] args) < >protected override void OnStop() < >> >

Класс службы должен наследоваться от базового класса ServiceBase . Этот класс определяет ряд методов, важнейшие из которых метод OnStart() , который запускает действия, выпоняемые службой, и метод OnStop() , останавливающий службу.

После того, как SCM вызовет метод Main и зарегистрирует службу, происходит непосредственный ее вызов через запуск метода OnStart.

Когда в консоли служб или через командную строку мы посылаем команду на остановку службы, то SCM обращается к методу OnStop для ее остановки.

Кроме этих двух методов в классе службы можно переопределить еще несколько методов базового класса ServiceBase:

  • OnPause : вызывается при приостановке службы
  • OnContinue : вызывается при возобновлении работы службы после ее приостановки
  • OnShutdown : вызывается при завершении работы Windows
  • OnPowerEvent : вызывается при изменении режима электропитания
  • OnCustomCommand : вызывается при получении службой пользовательской команды от Менеджера Управления Службами (Service Control Manager / SCM)

В конструкторе класса Service1 вызывается метод InitializeComponent() , который определен в файле дизайнера Service1.Designer.cs:

namespace FileWatcherService < partial class Service1 < private System.ComponentModel.IContainer components = null; protected override void Dispose(bool disposing) < if (disposing (components != null)) < components.Dispose(); >base.Dispose(disposing); > private void InitializeComponent() < components = new System.ComponentModel.Container(); this.ServiceName = «Service1»; >> >

Единственное, что надо в нем отметить, это установка названия службы (свойство ServiceName):

this.ServiceName = «Service1»;

Это то название, которое будет отображаться в консоли служб после установки данной службы. Мы можем его изменить, а можем и оставить как есть.

Теперь изменим код службы следующим образом:

using System; using System.ServiceProcess; using System.IO; using System.Threading; namespace FileWatcherService < public partial class Service1 : ServiceBase < Logger logger; public Service1() < InitializeComponent(); this.CanStop = true; this.CanPauseAndContinue = true; this.AutoLog = true; >protected override void OnStart(string[] args) < logger = new Logger(); Thread loggerThread = new Thread(new ThreadStart(logger.Start)); loggerThread.Start(); >protected override void OnStop() < logger.Stop(); Thread.Sleep(1000); >> class Logger < FileSystemWatcher watcher; object obj = new object(); bool enabled = true; public Logger() < watcher = new FileSystemWatcher(«D:\Temp»); watcher.Deleted += Watcher_Deleted; watcher.Created += Watcher_Created; watcher.Changed += Watcher_Changed; watcher.Renamed += Watcher_Renamed; >public void Start() < watcher.EnableRaisingEvents = true; while(enabled) < Thread.Sleep(1000); >> public void Stop() < watcher.EnableRaisingEvents = false; enabled = false; >// переименование файлов private void Watcher_Renamed(object sender, RenamedEventArgs e) < string fileEvent = «переименован в » + e.FullPath; string filePath = e.OldFullPath; RecordEntry(fileEvent, filePath); >// изменение файлов private void Watcher_Changed(object sender, FileSystemEventArgs e) < string fileEvent = «изменен»; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); >// создание файлов private void Watcher_Created(object sender, FileSystemEventArgs e) < string fileEvent = «создан»; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); >// удаление файлов private void Watcher_Deleted(object sender, FileSystemEventArgs e) < string fileEvent = «удален»; string filePath = e.FullPath; RecordEntry(fileEvent, filePath); >private void RecordEntry(string fileEvent, string filePath) < lock (obj) < using (StreamWriter writer = new StreamWriter(«D:\templog.txt», true)) < writer.WriteLine(String.Format(«файл был «, DateTime.Now.ToString(«dd/MM/yyyy hh:mm:ss»), filePath, fileEvent)); writer.Flush(); > > > > >

Читайте также:
Как в визуал студио начать писать программу

Ключевым классом, который инкапсулирует всю функциональность, является класс Logger. С помощью объекта FileSystemWatcher он будет вести мониторинг изменений в папке D://Temp. В методе Start() устанавливается, что мы будем отслеживать изменения через объект FileSystemWatcher. И вся работа будет идти, пока булевая переменная enabled равна true . А метод Stop() позволит завершить работу класса.

События FileSystemWatcher позволяют отслеживать все изменения в наблюдаемой папке. При этом будет вестись запись изменений в файл templog.txt. Чтобы не было гонки ресурсов за файл templog.txt, в который вносятся записи об изменениях, процедура записи блокируется заглушкой lock(obj) .

В итоге после создания, изменения, переименования и удаления файл лога будет содержать что-то наподобие:

30.07.2015 12:15:40 файл D:TempНовый текстовый документ.txt был создан 30.07.2015 12:15:46 файл D:TempНовый текстовый документ.txt был переименован в D:Temphello.txt 30.07.2015 12:15:55 файл D:Temphello.txt был изменен 30.07.2015 12:15:55 файл D:Temphello.txt был изменен 30.07.2015 12:16:01 файл D:Temphello.txt был удален

В самом классе службы Service1 в конструкторе устанавливается ряд опций:

this.CanStop = true; // службу можно остановить this.CanPauseAndContinue = true; // службу можно приостановить и затем продолжить this.AutoLog = true; // служба может вести запись в лог

В методе OnStart() для запуска объекта Logger вызывется новый поток:

protected override void OnStart(string[] args)

Новый поток нужен, так как текущий поток обрабатывает только команды SCM и должен возвращаться из метода OnStart как можно быстрее.

Когда от менеджера SCM поступает команда на остановку службы, срабатывает метод OnStop, который вызывает метод logger.Stop() . Дополнительная задержка позволит потоку логгера остановиться:

protected override void OnStop()

Однако самого класса службы еще недостаточно. Нам необходимо еще создать устанощик службы.

Источник: metanit.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru