it-swarm.com.de

Was ist der beste Weg, um den ausführenden Exe-Pfad in .NET zu erhalten?

Aus dem Programm a.exe in c:/dir muss ich die Textdatei c: /dir/text.txt öffnen. Ich weiß nicht, wo sich a.exe befinden könnte, aber text.txt befindet sich immer im selben Pfad. Wie bekomme ich den Namen der aktuell ausgeführten Assembly aus dem Programm heraus, damit ich auf die Textdatei zugreifen kann?

EDIT: Was ist, wenn a.exe ein Windows-Dienst ist? Es hat keine Anwendung, da es keine Windows-Anwendung ist.

Danke im Voraus.

62
pistacchio

Normalerweise greife ich auf das Verzeichnis zu, das die EXE-Datei meiner Anwendung enthält:

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

EDIT - Ohne Anwendungsobjekt zu verwenden:

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

Weitere Informationen finden Sie hier:

http://msdn.Microsoft.com/de-de/library/aa457089.aspx

12
Winston Smith
4
Tommy Carlier

Holen Sie sich die Assembly, die Sie interessiert (z. B. einer System.Reflection.Assembly a -Variablen zugewiesen):

  • System.Reflection.Assembly.GetEntryAssembly() oder
  • typeof(X).Assembly für eine Klasse X, die sich in der Assembly befindet, an der Sie interessiert sind (für Windows Forms können Sie typeof(Program) verwenden)

Ermitteln Sie dann den Pfad zu der Datei, aus der diese Assembly a geladen wurde:

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

Das Application -Objekt aus einer Windows Forms-Anwendung ist ebenfalls eine Möglichkeit, wie in anderen Antworten erläutert.

4
peSHIr

die Antwort von peSHlr funktionierte auch beim Testen in NUnit gut.

var thisType = typeof(MyCustomClass);

var codeLocation = Path.GetDirectoryName(thisType.Assembly.Location);

var codeLocationPath = Path.GetDirectoryName(codeLocation);

var appConfigPath = Path.Combine(codeLocationPath, "AppConfig");
0
C0r3yh

In VB.NET können wir es auf folgende Weise erhalten:

Assembly.GetEntryAssembly.Location

0
maks