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 :

Comment passer le chemin d'installation en paramètre à l'exe d'un service


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Par défaut Comment passer le chemin d'installation en paramètre à l'exe d'un service
    Bonjour,

    j'ai développé un service et un projet d'installation de ce service.
    Le projet d'installation installe les fichiers du service (exe + dll) dans un répertoire choisi par l'utilisateur lors de l'installation.
    Le service doit créer un fichier dans le répertoire d'installation.
    Il faut donc que le service connaisse le chemin d'installation choisi par l'utilisateur.
    J'aimerais donc passer en paramètre à l'exe du service le chemin d'installation.
    Le point d'entrée de l'exe est:

    Code c# : 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
    public class Program
    {
        public static void Main(String[] args)
        { 
           string path = null; 
         
           if ((args != null)
                && (args.Length > 0)
            {
                path = args[0];
            }
    
            System.ServiceProcess.ServiceBase[] ServicesToRun;
        // Change the following line to match.
        ServicesToRun = new System.ServiceProcess.ServiceBase[] 
          { new MyService(path) };
        System.ServiceProcess.ServiceBase.Run(ServicesToRun);
        }
    }

    Comment puis-je faire pour passer le chemin d'installation à l'exe du service ?

    Merci d'avance.
    Bye

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    Soit tu utilise une variable publique static dans laquelle tu met le tableau fourni par Main...

    Soit tu utilise les arguments de l'évenement OnStart() si mes souvenirs sont bons.
    Il y a d'autres moyens, mais pourquoi chercher compliqué ?

    Ensuite pourquoi cela ? est ce dur de créer une entrée dans le registre et de demander au service d'aller lire cette clé ?
    (LOCAL MACHINE surtout pas USERS)

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    La classe System.Diagnostics.Process me semble adaptée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          Process p = new Process();
          p.StartInfo.FileName = @"chemin_de_ton.exe";
          p.StartInfo.Arguments = data;
          p.Start();
    où data est ta string

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Par défaut
    Soit tu utilise une variable publique static dans laquelle tu met le tableau fourni par Main...
    Alors en fait mon problème est de passer les arguments à la méthode main lors de l'installation du service pendant laquelle l'utilisateur choisit le chemin d'installation.

    Soit tu utilise les arguments de l'évenement OnStart() si mes souvenirs sont bons.
    Je vais voir ça, mais je dois créer le fichier avant que le service démarre, lors de l'instanciation du service.

    Ensuite pourquoi cela ? est ce dur de créer une entrée dans le registre et de demander au service d'aller lire cette clé ?
    (LOCAL MACHINE surtout pas USERS)
    Alors oui j'avais pensé à cette solution. J'hésitais avec l'autre solution. J'avais regardé dans le registre et il y a une entrée qui me permet de récupérer le chemin à partir du nom du service.
    Je viens de lire la documentation MSDN sur la méthode OnStart et comme c'est conseillé, il vaut mieux passer par le registre vu que ça va être un service qui démarrera automatiquement au démarrage de Windows.

    Merci d'avance.

  5. #5
    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 : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Moi perso pour le même problème je ne m'étais pas embêté, j'avais fait ceci dans une méthode d'initialisation appelé par le OnStart :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    RegistryKey Key = null;
    string[] SplitKey;
    Key = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\NomDuServiceInstalle");
    SplitKey = ((string)Key.GetValue("ImagePath")).Split('\\');
    for(int i = 0; i < SplitKey.Length -1; i++)
    {
    	Path = Path + SplitKey[i] + "\\";
    }
    Path est un argument de la classe service (c'est une string).

    Cela marche très bien et en faite je n'avais pas trouvé d'autre méthode plus simple.

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Par défaut
    Bonjour ced600,

    merci pour la réponse. J'avais décidé pour conclure de passer par le registre ce qui me semblait aussi la meilleure solution.

    Merci
    Bye

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passer un chemin de fichier en paramètre
    Par fdaude dans le forum BIRT
    Réponses: 4
    Dernier message: 24/06/2009, 16h07
  2. Comment trouver le chemin d'installation de MATLAB
    Par LordPeterPan2 dans le forum MATLAB
    Réponses: 2
    Dernier message: 30/10/2007, 17h03
  3. Réponses: 3
    Dernier message: 09/10/2007, 16h22
  4. Comment retrouvez le chemin d'installation
    Par raphielda dans le forum Windows
    Réponses: 5
    Dernier message: 23/09/2007, 22h46
  5. comment passer le chemin de mon application
    Par chrarus2004 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/05/2007, 11h24

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