184 votes

Obtenir le répertoire de l'application à partir d'une application WPF

J'ai trouvé des solutions pour les Windows Forms avec AppDomain mais quelle serait l'équivalent pour un objet Application WPF?

363voto

Helen Points 13822

Une méthode:

System.AppDomain.CurrentDomain.BaseDirectory

Une autre façon de le faire serait:

System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)

0 votes

Ah, merci. Je dois avoir négligé AppDomain d'une manière ou d'une autre. En fait, je le cherchais...

0 votes

Ne semble pas être disponible dans VS.Net 2010 / WPF 4

0 votes

@AndyD273: Ça marche pour moi. Manque-t-il une directive using ou une référence à l'assembly?

31voto

Eddie Butt Points 338

Voici un autre:

System.Reflection.Assembly.GetExecutingAssembly().Location

2 votes

Celui-ci obtient l'emplacement après shadow-copying, comme indiqué dans la documentation. Je ne suis pas sûr si les suggestions dans la réponse acceptée sont affectées par le shadow-copying.

2 votes

Cela m'a donné le sous-répertoire du DLL que j'appelais, pas le répertoire principal du programme.

8voto

Flip Points 31

Vous pouvez également utiliser le premier argument des arguments de la ligne de commande :

String exePath = System.Environment.GetCommandLineArgs()[0]

1 votes

Cependant, notez qu'une application "malveillante" peut modifier ses arguments de ligne de commande.

0 votes

@Daniel: Pourquoi le ferait-il à lui-même? Ou voulez-vous dire une autre application?

1 votes

@Merlyn: Voir blogs.msdn.com/b/oldnewthing/archive/2009/11/25/9928372.aspx Je vais citer: c'est un "paramètre commodément initialisé pour le code de démarrage du processus". Ainsi, vous pouvez délibérément ou involontairement modifier cet emplacement mémoire.

3voto

ArsenMkrt Points 24447
Chaîne exePath = System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName;
 chaîne dir = Path.GetDirectoryName(exePath);

Essaye ça !

3voto

Roshan J Points 21

Essayer ceci. N'oubliez pas d'utiliser System.Reflection.

string baseDir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X