6
votes

Wix ServiceInstall Arguments

Est-ce que quelqu'un sait-il comment obtenir les arguments que je déclare dans ServiceInstall d'être transmis au service lorsqu'il démarre? Ils semblent toujours être nuls dans mon ondstart (string [] args).

<ServiceInstall
              Id="ServiceInstaller"
              Type="ownProcess"
              Vital="yes"
              Name="MyService"
              DisplayName="MyService"
              Description="MyService Desc"
              Start="auto"
              Account="LocalSystem"
              ErrorControl="ignore"
              Interactive="yes"
              Arguments="MY ARGS HERE"
              >
              </ServiceInstall>
              <ServiceControl Id="ServiceControl" Start="install" Stop="both" Remove="uninstall" Name="MyService" Wait="yes" />


6 commentaires

Vous devriez probablement envisager d'utiliser un fichier de configuration de service Windows à la place.


Ouais. Je pourrais faire ça. J'étais juste intéressé de voir pourquoi les arguments ne fonctionnaient pas.


Mais où ne fonctionnent-ils pas? Ne sont-ils pas traités correctement par le programme d'installation? Comme écrit, il semble que vous exceptez l'installateur pour fonctionner comme application App config.


Les arguments ne semblent jamais frapper mon service car il démarre. Sauf si (je pourrais avoir) mal compris la documentation. Ces arguments doivent être tirés dans le service lorsqu'il démarre à partir du programme d'installation.


Avez-vous déjà lu ServiceInstall - Élément de démarrage à l'aide d'une valeur de l'attribut ?


Votre service accepte-t-il argument de ligne de commande ? C'est-à-dire à mon esprit, un moyen possible de lire la documentation. Bien que je suis d'accord avec votre évaluation initiale.


3 Réponses :


2
votes

Quelqu'un est-il de progresser sur cela? Je ne vois pas ces arguments frapper mon service au démarrage:

    partial class PrintMonitorService : ServiceBase
    {
    private readonly PrintMonitorServiceManager _serviceManager;

    public PrintMonitorService()
    {
        InitializeComponent();
        _serviceManager = new PrintMonitorServiceManager();
    }

    protected override void OnStart(string[] args)
    {
        _serviceManager.StartHosting(args);
    }

    protected override void OnStop()
    {
        _serviceManager.StopHosting();
    }


2 commentaires

pareil ici. Vous avez trouvé des solutions mate? :(


Il existe une distinction entre les arguments qui sont passés à l'EXE lors du démarrage (dans Main ()) et les arguments passés sur le démarrage du service. Cela pourrait être ce qui vous confondre. Principale () Obtient Argc et Argv, et ServiceBase.cpp au démarrage Obtenez ses propres paramètres via: Vide virtuel Onstart (Dword Dwargc, LPWSTR * PSZARGV);



6
votes

genre de vieux, mais voici ce que vous pouvez faire

          <ServiceInstall
            Id="SomeService"
            Type="ownProcess"
            Vital="yes"
            Name="Some Service"
            DisplayName="Some Service"
            Description="Monitoring and management of some service"
            Start="auto"
            Account="LocalSystem"
            ErrorControl="normal"
            Interactive="no"/>
          <ServiceControl Id="StartSomeService" Start="install" Stop="both" Remove="uninstall" Name="Some Service" Wait="yes">
            <ServiceArgument>[P_USEREMAIL]</ServiceArgument>
            <ServiceArgument>[P_USERPASSWORD]</ServiceArgument>
            <ServiceArgument>[P_DEFAULTNAMINGCONTEXT]</ServiceArgument>
            <ServiceArgument>[P_USEHTTPPROXY]</ServiceArgument>
            <ServiceArgument>[P_PROXYADDRESS]</ServiceArgument>
            <ServiceArgument>[P_PROXYDOMAIN]</ServiceArgument>
            <ServiceArgument>[P_PROXYUSERNAME]</ServiceArgument>
            <ServiceArgument>[P_PROXYPASSWORD]</ServiceArgument>
          </ServiceControl>


1 commentaires

Pourriez-vous expliquer ce que vous avez posté?