Изпълнение на приложение като услуга на Windows

Възможно ли е да стартирате клиентско приложение като услуга? В една от статиите описах как да създам услуга на Windows с помощта на обикновени инструменти на ОС. Въпреки това, не всяко конзолно приложение ще може да работи като услуга, а програмите с графичен интерфейс по принцип не могат да работят по този начин. Но все още има възможност да стартирате приложението като услуга и програмата с оригиналното имеNon-Sucking Service Manager ще ни помогне в това.

NSSM е безплатен софтуер с отворен код и поддържа всички операционни системи на Microsoft от Windows 2000 до Windows 8. NSSM не изисква инсталация, просто го изтеглете и разархивирайте. Комплектът за разпространение включва версии за 32-битова и 64-битова ОС. Можете да вземете програмата от сайта nssm.cc, в момента последната стабилна версия е 2.21.1, която ще използвам.

За да демонстрираме възможностите на NSSM, нека опитаме да стартираме Windows Notepad като услуга на Windows 8.1.

Създайте услуга

За да създадете услуга с имеnotepad, стартирайте командната конзола, отидете в папката с разопакования NSSM (за 64-битов Windows) и въведете командата nssm install notepad, която отваря прозореца на графичния инсталатор на NSSM. За да създадете услуга, достатъчно е да посочите пътя до изпълнимия файл в полето Path и да щракнете върху бутона "Install service". Освен това в полето Опции можете да посочите ключовете, необходими за стартиране на услугата.

услуга

Също така на етапа на създаване на нова услуга можете да зададете някои допълнителни параметри.

Разделът Изключване изброява методите за изключване и изчакванията, използвани по време на нормално или аварийно изключване на приложението. Когато NSSM получи командаспира (например, когато приложението се изключва), след което се опитва да спре контролираното приложение по нормален начин. Ако приложението не отговори, тогава NSSM може принудително да прекрати всички процеси и подпроцеси на това приложение.

Има общо четири стъпки за изключване на приложението и по подразбиране те ще се използват в този ред:

• В първата стъпка NSSM се опитва да генерира и изпрати събитиетоCtrl+C. Този метод работи добре за конзолни приложения или скриптове, но не е приложим за графични приложения; • След това NSSM открива всички прозорци, създадени от приложението, и им изпраща съобщение WM_CLOSE, за да принуди приложението да излезе; • В третата стъпка NSSM оценява всички нишки, създадени от приложението, и им изпраща съобщение WM_QUIT, което ще бъде получено, ако приложението има опашка от съобщения за нишки; • В краен случай NSSM може да извика метода TerminateProcess(), принудително прекратявайки приложението.

Възможно е да деактивирате някои или дори всички методи, но различните методи работят за различни приложения и се препоръчва да оставите всичко както е, за да може приложението да се изключи правилно.

приложение

По подразбиране, когато дадена услуга се срине, NSSM се опитва да я рестартира. В раздела „Действия за изход“ можете да промените автоматичното действие в случай на необичайно изключване на приложението, както и да зададете забавяне, преди приложението да се рестартира автоматично.

windows

В раздела "Вход / изход (I / O)" можете да зададете пренасочване на входа / изхода на приложението към посочения файл.

windows

В раздела „Среда“ можете да зададете нови променливи на средата за услугата или да замените съществуващите.

услуга

Можете също така да не използвате графичната обвивка и веднага да създадете услуга вконзола с тази команда:

nssm инсталирайте notepad ″C:\Windows\system32\notepad.exe″

Управление на услугата

След като създадете услугата с помощта на NSSM, отидете на модула за услуги и намерете услугата notepad. Както можете да видите, на външен вид не се различава от другите услуги, ние също можем да го стартираме, спрем или променим режима на стартиране. Имайте предвид обаче, че nssm.exe е посочен като изпълним файл.

windows

И ако отидете в диспечера на задачите, ще видим следната картина: NSSM работи като основен (родителски) процес, услугата notepad работи като негов дъщерен процес и приложението Notepad вече работи в този дъщерен процес.

като

Премахване на услуга

За да премахнете услугата, въведете командата nssm remove notepad и потвърдете нейното премахване. И като напишете nssm премахнете notepad потвърдете, можете да направите без потвърждение.

изпълнение

Интерактивно стартиране на услуга

Основната разлика между потребителско приложение и услуга е, че веднъж стартирано, приложението може да изисква допълнителни действия от страна на потребителя, като щракване върху бутон или въвеждане на команда, за да продължи да работи. За да направите това, трябва да получите достъп до него, което, както се оказва, не е толкова лесно да се направи.

като

И тогава започват чудесата 🙂 Интерактивно стартирана услуга се отваря в изолирана сесия (сесия 0). Тази сесия може да бъде достъпна само от услугата за откриване на интерактивни услуги (ui0detect), която следи стартирането на интерактивни услуги на компютъра и издава предупреждение. В Windows 7\Server 2008 тази услуга е активирана по подразбиране, но в Windows 8\Server 2012 е деактивирана и не се показва в графичния модул за услуги (поне аз не го намерих там). Освен това,ако откриете тази мистериозна услуга и се опитате да я стартирате, ще получите съобщение за грешка.

приложение

След това отваряме конзолата PowerShell и стартираме услугата за откриване с командата:

Start-Service - Име ui0detect

изпълнение

След като се уверим, че услугата за откриване работи, рестартираме услугата notepad и получаваме този прозорец. Изберете „Преглед на съобщението“

приложение

и да влезем в нулевата сесия, в която работи нашето приложение. След това извършваме необходимите действия с него и се връщаме обратно.

windows

Такова интересно решение за стартиране на приложения като услуги на Windows. Не е най-красивата, но съвсем вярна на името си 🙂