Quel est le meilleur moyen d’obtenir le chemin de l’exe exécutant dans .NET?

Depuis le programme a.exe situé dans c: / dir, je dois ouvrir le fichier texte c: /dir/text.txt. Je ne sais pas où se trouve a.exe, mais text.txt sera toujours dans le même chemin. Comment obtenir le nom de l’assembly en cours d’exécution à partir du programme lui-même afin que je puisse accéder au fichier texte?

EDIT : et si a.exe est un service Windows? Il n’a pas d’application, car il ne s’agit pas d’une application Windows.

Merci d’avance.

    J’accède généralement au répertoire contenant le fichier .exe de mon application avec:

    System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location); 
     ssortingng exePath = Application.ExecutablePath; ssortingng startupPath = Application.StartupPath; 

    EDIT – Sans utiliser l’object application:

     ssortingng path = System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase ); 

    Voir ici pour plus d’informations:

    http://msdn.microsoft.com/en-us/library/aa457089.aspx

    Application.ExecutablePath

    Application.StartupPath

    Obtenez l’assemblage qui vous intéresse (par exemple, assigné à System.Reflection.Assembly a variable System.Reflection.Assembly a ):

    • System.Reflection.Assembly.GetEntryAssembly() ou
    • typeof(X).Assembly pour une classe X qui est dans l’assembly qui vous intéresse (pour Windows Forms, vous pouvez utiliser typeof(Program) )

    Ensuite, obtenez le chemin d’où le fichier à partir duquel cet assemblage a été chargé à partir de:

    • System.IO.Path.GetDirectoryName(a.Location)

    L’object Application d’une application Windows Forms est également une possibilité, comme expliqué dans d’autres réponses.

    L’utilisation de la réponse de peSHlr a également bien fonctionné lors des tests sur NUnit.

     var thisType = typeof(MyCustomClass); var codeLocation = Path.GetDirectoryName(thisType.Assembly.Location); var codeLocationPath = Path.GetDirectoryName(codeLocation); var appConfigPath = Path.Combine(codeLocationPath, "AppConfig"); 

    Dans VB.NET, nous pouvons l’obtenir de la manière suivante:

    Assembly.GetEntryAssembly.Location

     MessageBox.Show("This program is located in: " + Environment.CurrentDirectory);