h1. WinSW

h2. Windows Service Wrapper (WinSW) - это модуль, который оборачивает любое приложение и управляет им как службой Windows.

1) Необходимо скачать "WinSW":https://rm.cwms3000.ru/attachments/download/13837/WinSW-x64.exe:

2) Создать папку на локальном диске с названием *(Например myapp)*

!1.png!

3) Перенести ранее скаченный файл WinSW в созданную нами папку.

!2.png!

4) Переименовать файл WinSW в название сервиса, который вы будете оборачивать, как службу. (Например myapp)

!3.png!

5) Создать одноименный файл XML, в данном случае myapp.xml

!4.png!

6) Открыть файл на редактирование с помощью текстового редактора, в данном случае используем notepad++

!5.png!

7) Копируем пример конфигурации ниже {{collapse(Теги:)

*Расширение переменной среды
XML-файлы конфигурации могут включать расширения переменных среды в форме %Name%. Такие вхождения, если они будут найдены, будут автоматически заменены фактическими значениями переменных. Если имеется ссылка на неопределенную переменную среды, подстановки не происходит.*

*Кроме того, оболочка службы сама устанавливает переменную среды BASE, указывающую на каталог, содержащий переименованный файл WinSW.exe . Это полезно для ссылки на другие файлы в том же каталоге. Поскольку это переменная среды сама по себе, к этому значению можно также получить доступ из дочернего процесса, запущенного из оболочки службы.*

* id - *Обязательный*. 
 Указывает идентификатор, который Windows использует для внутренней идентификации службы. Он должен быть уникальным среди всех служб, установленных в системе, и должен полностью состоять из буквенно-цифровых символов.
<pre><code class="xml">
<id>myapp</id>
</code></pre>
* name - *Необязательный* . 
Краткое отображаемое имя службы, которое может содержать пробелы и другие символы. Оно не должно быть слишком длинным, например как в теге <id>, и оно также должно быть уникальным среди всех служб в данной системе.
<pre><code class="xml">
<name>myapp(powered by WinSW)</name>
</code></pre>
* description - *Необязательный*. 
Длинное удобочитаемое описание услуги. Это отображается в диспетчере служб Windows при выборе службы.
<pre><code class="xml">
<description>run myapp service</description>
</code></pre>
* executable - *Обязательный*. 
Этот элемент указывает запускаемый исполняемый файл. Это может быть либо абсолютный путь, либо вы можете просто указать имя исполняемого файла и разрешить его поиск PATH(хотя обратите внимание, что службы часто запускаются в другой учетной записи пользователя и, следовательно, могут отличаться PATH от вашей оболочки).
<pre><code class="xml">
<executable>java</executable>
</code></pre>
* arguments - *Необязательный*. 
Элемент указывает аргументы (параметры), которые необходимо передать исполняемому файлу.
<pre><code class="xml">
<arguments>-jar
http-dpc-service-0.0.1-SNAPSHOT.jar
--spring.datasource.url=jdbc:oracle:thin:@192.168.1.64:1521:ful
--spring.datasource.username=ful
--spring.datasource.password=ful
--server.servlet.contextPath=/cwms
--debug=false
</arguments>
</code></pre>
* logpath - *Необязательный*
Элемент указывает каталог, в котором создаются файлы журнала. Если этот элемент отсутствует, по умолчанию он будет находиться в том же каталоге, где находится файл конфигурации.
<pre><code class="xml">
<logpath>%BASE%\logs</logpath>
</code></pre>
* log (<log mode="roll-by-size"/>) - *Необязательный*
Элемент включает логирование и указывает какой режим логирования использовать. Если он не задан, то по умолчанию используется <log mode="append"/>.
*Режимы (mode):*
** mode="append"
В этом режиме создаются файлы myapp.out.log и myapp.err.log (где myapp — это базовое имя исполняемого файла и файла конфигурации), а выходные данные просто добавляются к этим файлам. Обратите внимание, что файл может стать довольно большим.
<pre><code class="xml">
<log mode="append"/>
</code></pre>
** mode="reset"
Работает так же, как и режим добавления, за исключением того, что при каждом запуске службы старые файлы журнала усекаются.
<pre><code class="xml">
<log mode="reset"/>
</code></pre>
** mode="none"
Данный режим отключает логирование.
<pre><code class="xml">
<log mode="none"/>
</code></pre>
** mode="roll-by-size"
Работает как режим добавления, но, кроме того, если файл журнала становится больше заданного размера, он скатывается в myapp.1.out.log , myapp.2.out.log и так далее. Вложенный <sizeThreshold> элемент указывает порог ротации в КБ (по умолчанию 10 МБ), а вложенный <keepFiles> элемент указывает количество сохраняемых свернутых файлов (по умолчанию 8).
<pre><code class="xml">
<log mode="roll-by-size">
  <sizeThreshold>10240</sizeThreshold>
  <keepFiles>8</keepFiles>
</log>
</code></pre>
** mode="roll-by-time">
Работает так же, как режим прокрутки, за исключением того, что вместо размера в качестве порога используется период времени в качестве порога.
Эта конфигурация должна сопровождать вложенный <pattern>элемент, который определяет шаблон метки времени, используемый в качестве имени файла журнала.
<pre><code class="xml">
<log mode="roll-by-time">
  <pattern>yyyyMMdd</pattern>
</log>
</code></pre>
** mode="roll-by-size-time"
Работает в сочетании режима размера файла и режима времени файла. Если файл журнала становится больше заданного размера, он свертывается с использованием <pattern>предоставленного.
<pre><code class="xml">
<log mode="roll-by-size-time">
  <sizeThreshold>10240</sizeThreshold>
  <pattern>yyyyMMdd</pattern>
  <autoRollAtTime>00:00:00</autoRollAtTime>
</log>
</code></pre>
* delayedAutoStart - *Необязательный*
Этот логический параметр включает режим отложенного запуска, если режим Automaticзапуска определен.
Обратите внимание, что этот режим запуска не повлияет на старые версии Windows старше Windows 7 и Windows Server 2008. В этом случае установка службы Windows может завершиться ошибкой.
<pre><code class="xml">
<delayedAutoStart>true</delayedAutoStart>
</code></pre>
* onfailure - *Необязательный*
Этот необязательный повторяющийся элемент управляет поведением, когда процесс, запущенный winsw, дает сбой (т. е. завершается с ненулевым кодом выхода).
<pre><code class="xml">
<onfailure action="restart" delay="10 sec"/>
<onfailure action="restart" delay="20 sec"/>
<onfailure action="reboot" />
</code></pre>
Например, в приведенной выше конфигурации служба перезапускается через 10 секунд после первого сбоя, перезапускается через 20 секунд после второго сбоя, а затем Windows перезагружается, если служба дает сбой еще раз.
*Действие (action):*
** restart - перезапустить службу
** reboot - перезагрузить Windows
** none - ничего не делать и оставить службу остановленной
* workingdirectory - *Необязательный*
Некоторые службы должны работать с указанным рабочим каталогом. Для этого укажите такой <workingdirectory> элемент.
<pre><code class="xml">
<workingdirectory>C:\myapp</workingdirectory>
</code></pre>
* priority - *Необязательный*
При необходимости укажите приоритет планирования процесса обслуживания.
<pre><code class="xml">
<priority>normal</priority>
</code></pre>
}}

<pre><code class="xml">
<service>
<id>myapp</id>
<name>myapp(powered by WinSW)</name>
<description>run myapp service</description>
<executable>java</executable>
<arguments>-jar mcis-mobile-service_0.0.6-WOL.jar 
  --spring.datasource.url=jdbc:oracle:thin:@192.168.1.89:1521:tst 
  --spring.datasource.username=tst 
  --spring.datasource.password=st 
  --server.port=10081 
  --app.session.timeout=900000
</arguments>
<logpath>%BASE%\logs</logpath>
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
<delayedAutoStart>true</delayedAutoStart>
<onfailure action="restart" delay="20 sec"/>
<workingdirectory>C:\myapp</workingdirectory>
<priority>normal</priority>
</service>
</code></pre>


8) Вставляем конфигурацию в файл открытый на редактировании.

!6.png!

9) Запустить myapp.exe install [options], чтобы установить службу.

{{collapse(Опции (Options))

* --no-elevate - Не вызывает автоматически запрос UAC.
* --user|--username <username> - Указывает имя пользователя учетной записи службы.
* --pass|--password <password> - Указывает пароль учетной записи службы.

}}

!7.png!

10) Запустить, чтобы использовать. myapp.exe start [путь до myapp.xml] --no-elevate

!8.png!

11) Запустить, чтобы увидеть, запущен ли ваш сервис. myapp.exe status [путь до myapp.xml]

!9.png!

{{collapse(Статусы (Status))

* Active - Служба запущена
* Inactive - Служба остановлена

}}