Windows-service maken van uitvoerbaar bestand

is er een snelle manier om, een uitvoerbaar bestand te geven, een Windows-service aan te maken die, wanneer gestart, deze lanceert?


Antwoord 1, Autoriteit 100%

Om een ​​Windows-service van een uitvoerbaar bestand te maken, kunt u sc.exegebruiken:

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

U moet aanhalingstekens hebben rond de werkelijke exepad en een spatie na de binPath=.

Meer informatie over de scopdracht is te vinden in Microsoft KB251192 .

Merk op dat het niet werkt voor alleen alle uitvoerbare bestand: het uitvoerbare bestand moet een Windows-service zijn (dwz implementeer servicemain ). Bij het registreren van een niet-servicebergeluid als een service, krijgt u de volgende foutmelding na het proberen om de service te starten:

FOUT 1053: de service heeft op tijd tijdig op het start- of controleverzoek gereageerd.

Er zijn hulpmiddelen die een Windows-service kunnen maken van willekeurige, niet-service-uitvoerbare bestanden, zie de andere antwoorden voor voorbeelden van dergelijke tools.


Antwoord 2, Autoriteit 53%

Gebruik NSSM (de niet-zuigende servicemanager ) om een ​​.bat of een .exe-bestand als een service uit te voeren.

http://nsssm.cc/

  • Stap 1 : Download NSSM
  • Stap 2 : Installeer uw sevice met nssm.exe install [serviceName]
  • Stap 3 : Hiermee wordt een GUI geopend die u gebruikt om uw uitvoerbare bestand te vinden

Antwoord 3, Autoriteit 20%

Uitbreiden (Kevin Tong) Antwoord.

Stap 1:Download & Pak nssm-2.24.zip

uit

Stap 2:Vanaf opdrachtregeltype:

C:\> nssm.exe install [servicename]

het zal de GUI openen zoals hieronder (het voorbeeld is de UT2003-server), blader er dan gewoon naar: yourapplication.exe

Meer informatie over: https://nssm.cc/usage


Antwoord 4, autoriteit 4%

Veel bestaande antwoorden bevatten menselijke tussenkomst tijdens de installatie. Dit kan een foutgevoelig proces zijn. Als u veel uitvoerbare bestanden als services wilt installeren, is het laatste wat u wilt doen, ze handmatig doen tijdens de installatie.

In de richting van het hierboven beschreven scenario heb ik sermangemaakt, een opdrachtregelprogramma om een uitvoerbaar bestand te installeren als een onderhoud. Het enige dat u hoeft te schrijven (en slechts één keer te schrijven) is een eenvoudig serviceconfiguratiebestand samen met uw uitvoerbare bestand. Uitvoeren

serman install <path_to_config_file>

zal de service installeren. stdouten stderrzijn allemaal gelogd. Kijk voor meer informatie op de projectwebsite.

Een werkend configuratiebestand is heel eenvoudig, zoals hieronder wordt aangetoond. Maar het heeft ook veel handige functies, zoals <env>en <persistent_env>hieronder.

<service>
  <id>hello</id>
  <name>hello</name>
  <description>This service runs the hello application</description>
  <executable>node.exe</executable>
  <!-- 
       {{dir}} will be expanded to the containing directory of your 
       config file, which is normally where your executable locates 
   -->
  <arguments>"{{dir}}\hello.js"</arguments>
  <logmode>rotate</logmode>
  <!-- OPTIONAL FEATURE:
       NODE_ENV=production will be an environment variable 
       available to your application, but not visible outside 
       of your application
   -->
  <env name="NODE_ENV" value="production"/>
  <!-- OPTIONAL FEATURE:
       FOO_SERVICE_PORT=8989 will be persisted as an environment
       variable to the system.
   -->
  <persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>

Antwoord 5, Autoriteit 3%

Deze extra’s bewijzen nuttige .. hoeven moeten worden uitgevoerd als een beheerder

sc create  <service_name> binpath=<binary_path>
sc stop    <service_name>
sc queryex <service_name>
sc delete  <service_name>

Als uw servicaam eventuele spaties heeft, insluit bij “QUOTES”.


Antwoord 6

Ik heb daar een goed product voor getest: altijd-up . Niet gratis, maar ze hebben een proefperiode van 30 dagen, dus je kunt het proberen …


Antwoord 7

hetzelfde als Sergii Pozharov’s antwoord , maar met een PowerShell CMDlet:

New-Service -Name "MyService" -BinaryPathName "C:\Path\to\myservice.exe"

Zie New-Servicevoor meer aanpassingen.

Dit werkt alleen voor uitvoerbare bestanden die de Windows Services al implementeren API.


Antwoord 8

Je kunt mijn kleine gratis hulpprogramma bekijken voor service-aanmaak\bewerk\delete-bewerkingen. Hier is een voorbeeld:

Ga naar Dienst -> Wijzig -> Maken

Uitvoerbaar bestand (google drive): [Download]

Broncode: [Download]

Blogpost: [BlogLink]

Service-editorklasse: WinServiceUtils.cs


Antwoord 9

Waarschijnlijk zijn al uw antwoorden beter, maar – om volledig te zijn over de keuze van de opties – wilde ik u herinneren aan een oude, vergelijkbare methode die al jaren wordt gebruikt:

SrvAny(geïnstalleerd door InstSrv)

zoals hier beschreven:
https://docs.microsoft. com/nl-nl/problemen oplossen/windows-client/deployment/create-user-defined-service


Antwoord 10

Ik heb een paar jaar geleden de platformonafhankelijke Service Manager-software gemaakt, zodat ik PHP en andere scripttalen als systeemservices op Windows-, Mac- en Linux-besturingssystemen kon starten:

https://github.com/cubiclesoft/service-manager

Service Manager is een set van geprecompileerde binaries die een systeemservice op het doel-besturingssysteem installeren en beheren met bijna identieke opdrachtregelopties (Broncode ook beschikbaar ). Elk platform heeft subtiele verschillen, maar de kernkenmerken zijn meestal genormaliseerd.

Als het kinderproces sterft, start Service Manager het automatisch opnieuw.

Processen die worden gestart met Service Manager moeten periodiek kijken naar twee meldingsbestanden om herstart te hanteren en verzoeken opnieuw te laden, maar ze hoeven dat niet noodzakelijkerwijs te doen. Service Manager zal het kindproces opnieuw opstarten als het niet reageert op een tijdige manier om herstart- / herlaadverzoeken opnieuw te starten.

Other episodes