Comment passer un paramètre à un service windows une fois pour toutes à l'installation plutôt qu'à chaque démarrage

nous avons une application de service Windows qui peut accepter des paramètres de ligne de commande comme:

MyService -option 

jusqu'à présent, lorsque nous voulons lancer le service avec un paramètre, nous le faisons soit manuellement à partir de la boîte de dialogue Propriétés du Service (dans la zone Paramètres de départ), soit avec la commande

sc start MyService -option  

ce que nous voulons est un moyen de installez le service "en permanence" avec ce paramètre, afin que les utilisateurs ont juste à démarrer / arrêter sans avoir pour définir le paramètre à chaque fois.

BTW, ajouter le paramètre dans L'entrée du registre ImagePath ne fonctionne pas, pas plus que d'installer comme ceci:

MyService -option /install

mise à Jour: Merci pour les réponses qui m'aident à affiner la question.

Ce que j'aimerais accomplir est de mettre le paramètre à l' niveau de Service lui-même (comme avec les propriétés) dans le cas où il y a plus d'un service dans le même exécutable. Le binpath l'option config ne fait que mettre à jour L'entrée ImagePath dans le registre. Cela ne peut pas être spécifique au service.

17
demandé sur François 2009-09-28 23:18:26

8 réponses

sc config MyService binPath= MyService.exe -option

mise à Jour

Le service paramètres sont stockés dans le registre à la clé HKLM\SYSTEM\CurrentControlSet\Services\<serviceName>\Parameters. Je ne sais pas comment les paramètres sont transmis au service. J' croire SCM lit ces valeurs puis quand il appelle StartService il passe à l' ServiceMain rappel.

10
répondu Remus Rusanu 2009-09-29 00:01:27

Comment mettre le paramètre dans un fichier de config?

6
répondu Raj More 2009-09-28 19:23:28

Selon ServiceBase.OnStart documentation

les arguments entrés dans la console ne sont pas sauvegardés; ils sont transmis au service une seule fois lorsque le service est démarré à partir du panneau de configuration. Les Arguments qui doivent être présents lorsque le service est lancé automatiquement peuvent être placés dans la chaîne de caractères ImagePath pour la clé de registre du service (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\). Vous pouvez obtenir les arguments de le registre utilisant la méthode GetCommandLineArgs, par exemple: string[] imagePathArgs = Environment.GetCommandLineArgs ();.

2
répondu Rosberg Linhares 2016-10-25 20:11:25

les Arguments passés en ligne de commande via ImagePath sont accessibles en main() ou via GetCommandLine(). Vous pouvez installer avec la ligne de commande args et ensuite dans votre ServiceMain, vérifier si des arguments ont été passés dans le paramètre lpszArgs. Si ce n'est pas le cas, appelez GetCommandLine et voyez s'il y en a eu qui ont été passés par là.

1
répondu Dustin 2009-09-28 19:31:48

Powershell peut le faire, mais vous devez utiliser .Net pour l'atteindre.

new-Object System.ServiceProcess.ServiceController("$ServiceName",$ComputerName)).Start("$Parameter")
1
répondu virgored 2015-02-24 21:33:52

S'il y a plus d'un service avec le même exécutable, alors vous les installerez avec des noms de service différents. Vous pouvez consulter le nom du service au lieu des paramètres.

pour obtenir le nom du service, vous pouvez utiliser ceci comment un service Windows peut-il déterminer son nom de service?

0
répondu timothy 2017-05-23 12:02:56

Utilisez la commande SC (service control), elle vous donne beaucoup plus d'options que juste start & stop.

DESCRIPTION:
          SC is a command line program used for communicating with the
          NT Service Controller and services.
  USAGE:
      sc <server> [command] [service name]  ...

      The option <server> has the form "\ServerName"
      Further, help on commands can be obtained by typing: "sc [command]"
      Commands:
        query-----------Queries the status for a service, or
                        enumerates the status for types of services.
        queryex---------Queries the extended status for a service, or
                        enumerates the status for types of services.
        start-----------Starts a service.
        pause-----------Sends a PAUSE control request to a service.
        interrogate-----Sends an INTERROGATE control request to a service.
        continue--------Sends a CONTINUE control request to a service.
        stop------------Sends a STOP request to a service.
        config----------Changes the configuration of a service (persistent).
        description-----Changes the description of a service.
        failure---------Changes the actions taken by a service upon failure.
        qc--------------Queries the configuration information for a service.
        qdescription----Queries the description for a service.
        qfailure--------Queries the actions taken by a service upon failure.
        delete----------Deletes a service (from the registry).
        create----------Creates a service. (adds it to the registry).
        control---------Sends a control to a service.
        sdshow----------Displays a service's security descriptor.
        sdset-----------Sets a service's security descriptor.
        GetDisplayName--Gets the DisplayName for a service.
        GetKeyName------Gets the ServiceKeyName for a service.
        EnumDepend------Enumerates Service Dependencies.

      The following commands don't require a service name:
      sc <server> <command> <option>
        boot------------(ok | bad) Indicates whether the last boot should
                        be saved as the last-known-good boot configuration
        Lock------------Locks the Service Database
        QueryLock-------Queries the LockStatus for the SCManager Database
  EXAMPLE:
          sc start MyService
0
répondu Tejas Bagade 2016-10-18 10:48:17

Si vous souhaitez passer des paramètres lors de votre démarrage du service automatiquement, cela peut aider: https://stackoverflow.com/a/41319479/4521055

0
répondu BlueRiver 2017-05-23 12:02:46