Comment démarrer un service avec certains paramètres de démarrage sous Windows

17

Comment démarrer un service avec certains paramètres? Dans une autre question, j'ai trouvé

net start servicename blah

mais si j'essaye, netjette une erreur de syntaxe sur moi.

Qu'est-ce que je fais mal?

Edit: pour clarifier lesnet start servicenametravaux très bien, mais je dois passer des paramètres au service. Je peux le faire manuellement enservices.mscremplissant un paramètre de démarrage avant de démarrer le service. Mais comment puis-je le faire à partir d'un script?

Un autre montage: Désolé, mais ma question était trompeuse . Dans mes tests, j'avais beaucoup plus de paramètres et ce n'est pas le/blah net startproblème. En fait, tout ce qui commence par une barre oblique est très bien . Alors çanet start servicename /blahmarche,net start servicename blahça ne marche pas. Depuis que j'ai besoinnet start servicename /foo bar, c'estbarle problème.

sbi
la source

Réponses:

29
sc start fooservice arg1 arg2 ...
user1686
la source
Je ne sais pas comment j'ai réussi à manquer votre réponse à l'époque, mais je suis certainement très heureux de l'avoir trouvée maintenant (par accident). Cela fonctionne comme un charme - même avec des paramètres qui ne commencent pas par /. Merci beaucoup!
sbi
Nous sommes en 2018 et ni "sc start ..." ni "net start ..." ne semblent fonctionner dans Windows 10. La modification du registre fonctionne serverfault.com/questions/507561/…
MarcH
8

NET STARTne vous permettra pas de passer des paramètres arbitraires pour autant que je sache (il semble qu'ils doivent être préfixés par un /), je crois que la bonne façon est de modifier la clé de registre appropriée et d'arrêter / démarrer le service. En supposant que votre service personnalisé s'appelle MyService:

[HKLM\SYSTEM\CurrentControlSet\Services\MyService]
"ImagePath":C:\Projects\MyService\bin\MyService.exe Parameter1 Parameter2

En réalité, une meilleure façon est de stocker votre configuration dans un endroit connu du service, comme le registre ou le système de fichiers, et de lire toutes les valeurs dont vous avez besoin. Comme vous pouvez le voir, la personnalisation de la ligne de commande est un peu plus pénible qu'elle ne devrait l'être.

S'il s'agit par hasard d'un service développé par .NET, vous pouvez créer n copies de l'exécutable sur votre système de fichiers et obtenir automatiquement les paramètres du fichier app.config approprié.

On dirait que vous êtes peut-être allé trop loin en dehors de la boîte Win32. Étant donné que cela ressemble à un développement personnalisé, toutes les autres solutions proposées, bien que ce ne soit peut-être pas votre idéal, fonctionneront correctement et constituent un moyen plus sûr.

Goyuix
la source
Pouah. Le service prend un fichier de configuration. Il utilise soit un nom de fichier par défaut, soit un nom qui lui a été transmis. Comme j'ai besoin de deux instances différentes du service en cours d'exécution, je dois les pointer vers des fichiers de configuration différents. Devoir jouer avec le registre semble un hack très laid. N'y a-t-il vraiment pas d'autre moyen que cela (et l'interface graphique)?
sbi
Goyuix, voir ma question éditée. n'accepte les paramètres, mais seulement ceux commençant par un . net start /
sbi
Goyuix, j'utilise maintenant sc.exe. Voir la réponse de grawity (que j'ai en quelque sorte réussi à manquer à l'époque).
sbi
4

Vous avez besoin d'une barre oblique avant chaque paramètre lors de l'utilisation net start. Assurez-vous également de citer les paramètres qui ont des espaces.

net start servicename /param0 /"param1 with spaces" /"/param2_has_slash"
Même Mien
la source
Regardez à nouveau mon problème. J'ai aussi des paramètres qui doivent commencer par une barre oblique. Comment pourrais-je les passer alors?
sbi
Essayez ceci: net start servicename / "/ foo" / bar
Even Mien
3

net start servicename /foo pour un seul argument

net start servicename /"foo bar" pour une chaîne ou une liste d'arguments

Remarque : Cette question a 8 ans mais je n'ai pas la réputation de commenter la réponse acceptée et c'est toujours un résultat Google top en 2018, donc je voulais clarifier ce qui fonctionnait maintenant en ce qui concerne la modification finale des questions.

MissingL_tter
la source
Remarque: je vous ai donné un vote positif, alors maintenant votre réponse est en 4ème position, et vous avez eu un coup de reps. Amusez-vous ici! :-)
sbi
1

Vous devez utiliser le nom de service réel tel qu'il apparaît dans le panneau de configuration, services. S'il contient des espaces, vous devez mettre des guillemets autour du nom du service.

Pour obtenir le nom du service réel, tapez simplement net startsans aucun paramètre à l'invite de commande. Il devrait vous donner une liste de tous les services en cours d'exécution afin que vous puissiez obtenir le nom réel du service. Ensuite, utilisez simplementnet start <servicename>

Robert Williams
la source
Robert, c'est un de mes services que j'installe puis démarre dans un script. Je vais net start "my-service-name"bien. C'est net start "my-service-name" /blahce qui me donne un message d'erreur. J'ai également essayé net start "my-service-name" -blahet c'est aussi une erreur de syntaxe.
sbi
0

InstSrv et SrvAny pourraient-ils aider à cela? Guide et liens

Dave M
la source
Je l'ai regardé brièvement et je ne pense pas. (Veuillez me corriger si je me trompe.) J'ai un véritable exécutable de service en place et fonctionne très bien. C'est juste que (pour les tests) j'ai besoin de l'installer et de le démarrer à partir d'un script, et j'ai besoin de passer des paramètres au service.
sbi