Comment passer un paramètre à un service Windows une fois pour toutes à l'installation au lieu de chaque démarrage
Nous avons une application du Service Windows qui peuvent accepter des paramètres de ligne de commande comme:
MyService -option
Jusqu'à présent, lorsque l'on veut démarrer le service avec un paramètre, soit nous faire manuellement à partir de la boîte de dialogue Propriétés du Service (dans la zone paramètres de Démarrage) ou avec la commande
sc start MyService -option
Ce que nous aimerions, est un moyen de installer le service "de façon permanente" avec ce paramètreafin que les utilisateurs ont juste à le démarrer/l'arrêter, sans avoir à mettre le paramètre à chaque fois.
BTW, en ajoutant le paramètre dans le ImagePath entrée de registre ne fonctionne pas, ni ne fait l'installation comme ceci:
MyService -option /install
Mis à jour: Merci pour les réponses qui m'aident à affiner la question.
Ce que j'aimerais accomplir est de mettre le paramètre à la de niveau de Service lui-même (comme avec les propriétés) dans le cas où il y a plus de 1 service dans le même exécutable. Le binpath option de configuration est simple mise à jour de la ImagePath entrée dans le registre. Qui ne peut pas être spécifique de service.
source d'informationauteur François | 2009-09-28
Vous devez vous connecter pour publier un commentaire.
Mise à jour
Le service paramètres sont stockés dans le registre à la clé
HKLM\SYSTEM\CurrentControlSet\Services\<serviceName>\Parameters
. Je ne suis pas sûr que la façon dont les paramètres sont transmis au service. Je croire SCM lit ces valeurs puis, quand il appelleStartService
il transmet à laServiceMain
de rappel.Comment mettre le paramètre dans un fichier de config?
Selon la ServiceBase.OnStart documentation:
Les Arguments passés sur la ligne de commande via ImagePath sont accessibles dans main() ou via GetCommandLine(). Vous pourriez installer avec la commande-ligne args et puis dans votre ServiceMain, vérifiez si tous les arguments sont passés dans le lpszArgs paramètre. Si pas, appelez GetCommandLine et de voir si tout ont été transmis de cette façon.
Powershell peut le faire, mais vous devez utiliser .Net pour l'atteindre.
Si il n'y a plus d'un service avec le même exécutable, alors vous serait de les installer avec différents noms de service. Vous pouvez consulter le nom du service au lieu des paramètres.
Pour obtenir le nom du service que vous pouvez utiliser cette
Comment un Service Windows déterminer son ServiceName?
Utiliser la SC (service de contrôle) de commande, il vous donne beaucoup plus d'options que seulement start & stop.
Si vous souhaitez passer des paramètres lors de votre démarrage du service automatiquement, cela peut vous aider: https://stackoverflow.com/a/41319479/4521055