Existe-t-il un moyen rapide, à partir d'un fichier exécutable, de créer un service Windows qui, une fois démarré, le lance?
Existe-t-il un moyen rapide, à partir d'un fichier exécutable, de créer un service Windows qui, une fois démarré, le lance?
Réponses:
Pour créer un service Windows à partir d'un exécutable, vous pouvez utiliser sc.exe
:
sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"
Vous devez avoir des guillemets autour du exe
chemin réel et un espace après le binPath=
.
Plus d'informations sur la sc
commande peuvent être trouvées dans Microsoft KB251192 .
Notez qu'il ne fonctionnera pas pour n'importe quel exécutable: l'exécutable doit être un service Windows ( c'est-à-dire implémenter ServiceMain ). Lors de l'enregistrement d'un exécutable non-service en tant que service, vous obtiendrez l'erreur suivante en essayant de démarrer le service:
Erreur 1053: Le service n'a pas répondu à la demande de démarrage ou de contrôle en temps opportun.
Il existe des outils qui peuvent créer un service Windows à partir d'exécutables arbitraires non liés au service, voir les autres réponses pour des exemples de tels outils.
binpath=
ainsi que d'avoir à entourer le chemin exécutable avec des guillemets doubles est totalement faux, au moins pour Windows 10. la citation est requise si et seulement si le chemin contient des caractères spéciaux comme des espaces. De plus, la casse (lowe / upper / mixed-case) n'a pas d'importance n'importe où, dans les noms de variables aussi, et displayname="my service"
est un autre avantage à transmettre sur la ligne de commande lors de la création d'un service à afficher comme première ligne ( Name
) services.msc
.
binPath=
était requis pour moi sur Windows 7 mais pas sur Windows 10
Utilisez NSSM ( le non-Sucking Service Manager ) pour exécuter un fichier .BAT ou tout fichier .EXE en tant que service.
nssm.exe install [serviceName]
Extension de la réponse (Kevin Tong).
Étape 1: Téléchargez et décompressez nssm-2.24.zip
Étape 2: à partir du type de ligne de commande:
C:\> nssm.exe install [servicename]
il ouvrira l'interface graphique comme ci-dessous (l'exemple est le serveur UT2003), puis parcourez-le simplement: yourapplication.exe
Plus d'informations sur: https://nssm.cc/usage
nssm.exe install [serviceName]
. Cette solution fonctionne mais si vous avez une application GUI, elle ne fonctionnera pas sur Win Serever2003. Si vous souhaitez le supprimer ultérieurement, utiliseznssm.exe remove [youservicename]
nginx
n'est pas nécessaire et trompeur. La commande fonctionnera également sans elle. Il s'agit d'un paramètre facultatif si vous souhaitez fournir le nom du service à partir de l'invite de commande.
De nombreuses réponses existantes incluent une intervention humaine au moment de l'installation. Cela peut être un processus sujet aux erreurs. Si vous souhaitez que de nombreux exécutables soient installés en tant que services, la dernière chose que vous voulez faire est de les faire manuellement au moment de l'installation.
Vers le scénario décrit ci-dessus, j'ai créé serman , un outil en ligne de commande pour installer un exécutable en tant que service. Tout ce que vous avez besoin d'écrire (et d'écrire une seule fois) est un simple fichier de configuration de service avec votre exécutable. Courir
serman install <path_to_config_file>
va installer le service. stdout
et stderr
sont tous enregistrés. Pour plus d'informations, consultez le site Web du projet .
Un fichier de configuration de travail est très simple, comme illustré ci-dessous. Mais il possède également de nombreuses fonctionnalités utiles telles que <env>
et <persistent_env>
ci - dessous.
<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>
ces extras s'avèrent utiles .. doivent être exécutés en tant qu'administrateur
sc create <service_name> binpath=<binary_path>
sc stop <service_name>
sc queryex <service_name>
sc delete <service_name>
Si le nom de votre service comporte des espaces, placez-les entre "guillemets".
sc create <service_name> binpath= <binary_path>
Vous pouvez consulter mon petit utilitaire gratuit pour les opérations de création, de modification et de suppression de services. Voici un exemple de création:
Allez dans Service -> Modifier -> Créer
Fichier exécutable (google drive): [Télécharger]
Code source: [Télécharger]
Article de blog: [BlogLink]
Classe d'éditeur de service: WinServiceUtils.cs