
Sous Windows, les services sont utilisés pour exécuter les binaires d’applications en arrière-plan, généralement sans nécessiter d’interaction de l’utilisateur. Les services peuvent démarrer automatiquement lors du démarrage de Windows et s’exécuter en continu en arrière-plan jusqu’à l’arrêt du système. Cet article explique comment créer un nouveau service système à partir d’un fichier binaire exécutable.
Il existe plusieurs outils Windows intégrés qui permettent aux administrateurs de créer de nouveaux services via l’invite de commande. Il s’agit notamment de la commande de console sc.exe et de l’applet de commande New-Service PowerShell.
La commande suivante créera un nouveau service à partir du fichier exécutable spécifié avec des arguments supplémentaires :
sc create CorpCollectorService binPath="C:\Program Files (x86)\CORP\collector.exe-i C:\tools\config.xml"start=auto DisplayName="CORP Log Collector Service"

Si la commande est exécutée avec succès, un message apparaîtra :
SC CreateService SUCCESS
Les arguments suivants sont utilisés :
-
CorpCollectorService– nouveau nom de service -
binPath– contient le chemin complet du fichier exécutable, ainsi que tous les arguments de lancement requis (entre guillemets s’il y a des espaces) -
start=auto– démarre le service automatiquement au démarrage de Windows (boot|system|auto|demand|disabled). -
DisplayName— nom d’affichage du service
Des paramètres supplémentaires peuvent être utilisés :
type— type de service. Par défaut,
posséder
est utilisé, ce qui signifie que le service s’exécute dans son propre processus. Vous pouvez également spécifier ici : own|share|kernel|filesys|adapt|rec|interact
- Par défaut, le service s’exécute pour le compte de
Système local. Si vous devez exécuter le service au nom d’un compte utilisateur spécifique, spécifiez le nom d’utilisateur et le mot de passe à l’aide des options : obj="woshub\user1"password="myUserPassw0r1"
Maintenant, ouvrez le composant logiciel enfichable de gestion des services graphiques Services ( services.msc ). Le nouveau service apparaîtra dans la liste des services (appuyez sur F5 pour actualiser la base de données Service Manager). Ici, vous pouvez démarrer ou arrêter le service, ou modifier le type de démarrage. 
Tous les paramètres du service sont stockés sous la clé de registre HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Services\. La sous-clé CorpCollectorService a été créée automatiquement pour le nouveau service.

Voici une commande PowerShell similaire pour créer un nouveau service :
New-Service-Name CorpCollectorService-BinaryPathName "C:\Program Files (x86)\CORP\collector.exe-i C:\tools\config.xml" -DisplayName "mon service de test" -Description "CORP Log Collector Service" -StartupType "Automatique"

Si vous devez configurer un nom d’utilisateur et un mot de passe pour démarrer le service, utilisez la syntaxe suivante :
` $username=“user123”$password=“PaSSw0rd1”$securepassword=ConvertTo-SecureString $password-AsPlainText-Force
$ cred = Nouvel objet System.Management.Automation.PSCredential ($ nom d’utilisateur, $ securepassword)
Nouveau-Service…-Credential $cred `
Notez que tous les binaires exécutables ne peuvent pas fonctionner correctement en tant que services Windows. L’application doit être spécifiquement conçue pour fonctionner comme un service répondant aux commandes du Service Control Manager (SCM). L’erreur 1053 apparaîtra lors de la tentative de démarrage d’un service incapable de gérer les signaux de contrôle SCM :
Windows could not start the MyService1 service on Local Computer.Error 1053: The service did not respond to the start or control request in a timely fashion.

Plusieurs outils tiers peuvent être utilisés pour créer un service à partir d’un programme qui n’est pas conçu pour fonctionner en mode service Windows (y compris ceux dotés d’interfaces graphiques). Le Kit de ressources Windows Server 2003 comprenait les commandes « srvany.exe » et « instsrv.exe », qui pouvaient être utilisées pour créer un service à partir de n’importe quel binaire. Cependant, il est désormais préférable d’utiliser l’outil moderne NSSM (Non-Sucking Service Manager). Contrairement aux anciens outils Microsoft, il surveille les processus d’application en cours d’exécution et offre des fonctionnalités avancées de gestion des processus. NSSM peut exécuter n’importe quelle application, script ou exécutable en tant que service Windows en arrière-plan fiable et le redémarrer automatiquement en cas de panne.
NSSM peut être installé à l’aide du gestionnaire de packages WinGet :
installation Winget--id NSSM.NSSM-e
Maintenant, pour créer un service à partir de n’importe quel exécutable, exécutez :
nssm install testservice "C:\Tools\collector.exe"
Notez que dans les propriétés du nouveau service, nssm.exe sert de lanceur exécutable pour le binaire de votre application.

NSSM fournit une interface graphique simple qui permet une configuration pratique des paramètres de service.
Par exemple, pour modifier un service créé précédemment, exécutez :
nssm modifier le service de test

Nous avons déjà démontré comment utiliser NSSM pour exécuter un script PowerShell en tant que service système.
*️⃣ Lien source :
Gestionnaire de packages WinGet, exécutez un script PowerShell en tant que service système,