Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

2 réponses
Avatar
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 "..\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);
}
}

2 réponses

Avatar
Gilles TOURREAU
Le Fri, 31 Aug 2007 06:16:13 +0200, aaa.aaa a écrit:

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
Avatar
aaa.aaa
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 a écrit:

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