none
[Dot Net 2.0] [Windows Service App][Windows Server 2003] RRS feed

  • Question

  • Hello,

    J'ai une application qui lors du démarrage doit lire différent fichiers de config:
    une fichier xml encrytée pour les accès à la base de données
    un fichier certificat pour les connexions SSL.

    Si je démarre cette application en mode console sous le répertoire "..\toto" avec tout les fichiers de config sous ce meme répertoire cela fonctionne bien.


    Si je démmarre cette meme application en mode service depuis le meme répertoire "..\toto", je dois absolument mettre ces deux fichiers sous le répertoire "..\Windows\systeme32"
    Par contre le fichier monApp.exe.config peut rester sous le répertoire de l'application.

    Dans le code du chargement des deux fichiers j'utilise fonction static :      Directory.GetCurrentDirectory().

    Pourquoi dois-je mettre ces deux fichiers sous ..\system32 en mode service ?

    Ci-dessous le code pour installer mon application en mode service

    [RunInstallerAttribute(true)]
    public class MyProjectInstaller: Installer
    {
        private ServiceInstaller serviceInstaller1;
        private ServiceProcessInstaller processInstaller;

        public MyProjectInstaller()
        {
        // Instantiate installers for process and services.
            processInstaller = new ServiceProcessInstaller();
            serviceInstaller1 = new ServiceInstaller();

        // The services run under the system account.
            processInstaller.Account = ServiceAccount.LocalSystem;

        // The services are started manually.
            serviceInstaller1.StartType =ServiceStartMode.Automatic;

        // ServiceName must equal those on ServiceBase derived classes.
            serviceInstaller1.ServiceName = "MyApp";

               
            Installers.Add(serviceInstaller1);
            Installers.Add(processInstaller);
        }
    }

    vendredi 31 août 2007 04:28

Réponses

  • C'est normal...

     

    L'executable qui lance votre service est svchost.exe présent dans le répertoire système...

    Votre application (même si elle est executable) ne s'execute pas comme un .exe classique, mais appelé comme une DLL via svchost.exe.

    Cela explique que Directory.GetCurrentDirectory() vous renvoi le répertoire système...

     

    Dans votre cas, utilisez AppDomain.CurrentDomain.BaseDirectory qui permet de récuperer le répertoire de base des assembly .NET en cours d'execution dans le domaine courant.

     

    Cordialement

    vendredi 31 août 2007 08:49
    Modérateur

Toutes les réponses

  • C'est normal...

     

    L'executable qui lance votre service est svchost.exe présent dans le répertoire système...

    Votre application (même si elle est executable) ne s'execute pas comme un .exe classique, mais appelé comme une DLL via svchost.exe.

    Cela explique que Directory.GetCurrentDirectory() vous renvoi le répertoire système...

     

    Dans votre cas, utilisez AppDomain.CurrentDomain.BaseDirectory qui permet de récuperer le répertoire de base des assembly .NET en cours d'execution dans le domaine courant.

     

    Cordialement

    vendredi 31 août 2007 08:49
    Modérateur
  •  

    Merci ,

     

    je vais tester

     

     

    vendredi 31 août 2007 10:06