IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Passer des paramètres à un Windows service


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 90
    Points
    90
    Par défaut Passer des paramètres à un Windows service
    Bonjour à tous,

    je suis en train de créer un windows service qui doit exécuter un .bat.
    Ce .bat est installé sur le poste en même temps que le service windows.
    J'utilise un Installer et installe mon service via un MSI.
    Durant l'intallation je spécifie le répertoire d'installation (où est entre autre installé le .bat)

    ma question ...j'y arrive enfin !!
    Comment récupérer le chemin du répertoire d'installation pour le passer en paramètre au service windows ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public partial class MonService : ServiceBase
        {
            public MonService()
            {
                InitializeComponent();
            }
     
            protected override void OnStart(string[] args)
            {            
                evLgTracer.WriteEntry("MonSevice started.");
     
                string monCheminVersMonFichierBat = ???;
     
                ProcessStartInfo processInfo = new ProcessStartInfo(monCheminVersMonFichierBat + @"/info.bat");
                Process monProcess = Process.Start(processInfo);
                monProcess.WaitForExit();
            }
     
            protected override void OnStop()
            {
                evLgTracer.WriteEntry("MonSevice stopped.");
            }
    }
    merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Où est stocké le chemin du fichier .bat ? ... A mon avis, ton installateur aurait du créer une clé "BatInstallPath" quelque part dans le registre que le service peut récupèrer ou bien ajouter une clé dans le fichier app.config et que tu charges via la configuration .NET (un MSI en général sait faire ce genre de chose, il faut l'avoir prévu). Si l'information est stockée nulle part ... utilise la classe CrystalBall

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    si ton bat est stocké au meme endroit que l'exécutable de ton service,
    tu n'a pas besoin de connaitre ce chemin d'accès..
    un chemin relatif ./nomfichier.bat suffit largement

    n'oublie pas que ton service windows est lancé dans "son" répertoire...
    il peut donc accèder à tout fichier dans son arborescende pour peu qu'il en est le droit, sans pour autant donner un nom de fichier "absolu"

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Tiens c'est vrais je n'y avais pas pensé, et dire que moi mon service s'embête à récuperer la clé crée automatiquement par le MSI pour la désinstallation.
    Cette clé contenant le chemin complet du service.
    Enfin j'en ai besoin pour trouver le rep d'install d'un prog que je n'installe pas mais qui doit être présent sur la machine et qui utilise un installeur qui fait la même chose qu'un msi
    Bon j'en parle alors voila le code de récupération de la clé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    RegistryKey Key = null;
    string[] SplitKey;
    string path ="";
    Key = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\Nomdemonservice");
    SplitKey = ((string)Key.GetValue("ImagePath")).Split('\\');
    for(int i = 0; i < SplitKey.Length -1; i++)
    {
    	Path = Path + SplitKey[i] + "\\";
    }
    Nomdemonservice est le nom de mon service
    ImagePath contient le chemin complet de l'executable, d'où mon split et ma reconstruction du chemin.
    Enfin à mon avis en fouillant un peu mieux les methodes de string, on peut reconstruire le chemin plus facilement qu'avec mon split et ma boucle
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

Discussions similaires

  1. Passer des paramètres à un service de démarrage!
    Par nixmind dans le forum Administration système
    Réponses: 5
    Dernier message: 01/07/2013, 05h52
  2. Passer des paramètres d'une Activity vers un Service
    Par Messi007 dans le forum Android
    Réponses: 3
    Dernier message: 23/09/2012, 18h26
  3. Passer des paramètres au Parent window
    Par DeveloppeurWeb dans le forum ASP.NET
    Réponses: 4
    Dernier message: 05/11/2010, 11h24
  4. Réponses: 7
    Dernier message: 30/12/2004, 12h01
  5. passer des paramétres à un fichier sql
    Par vbcasimir dans le forum Oracle
    Réponses: 2
    Dernier message: 21/12/2004, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo