[Dot Net 2.0] [Windows Service App][Windows Server 2003]

Le
aaa.aaa
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 "..Windowssysteme32"
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);
}
}
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gilles TOURREAU
Le #12127161
Le Fri, 31 Aug 2007 06:16:13 +0200, aaa.aaa
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 "..Windowssysteme32"
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);
}
}




Je copie/colle la réponse que j'ai posté sur
http://forums.microsoft.Com/MSDN-FR/

"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

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
aaa.aaa
Le #12183631
Merci,

j'ai testé c'est bon

et merci encore pour l'explicatioon

Gilles TOURREAU a écrit :
Le Fri, 31 Aug 2007 06:16:13 +0200, aaa.aaa
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 "..Windowssysteme32"
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);
}
}




Je copie/colle la réponse que j'ai posté sur
http://forums.microsoft.Com/MSDN-FR/

"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



Publicité
Poster une réponse
Anonyme