2009-11-01 2 views
61

Werfen Sie einen Blick auf diesem Pseudo-Code:Abrufen des absoluten Pfads der ausführbaren Datei mit C#?

string exe_path = system.get_exe_path() 
print "This executable is located in " + exe_path 

Wenn ich das obige Programm und legen Sie die ausführbare Datei in C:/meow/ bauen, würde es This executable is located in C:/meow/ jedes Mal auszudrucken es ausgeführt wird, unabhängig von dem aktuellen Arbeitsverzeichnis.

Wie kann ich dies einfach mit C# erreichen?

+0

Duplizieren: http://stackoverflow.com/questions/218061/get-the-applications-path –

+0

http://stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self -exe/1024937 # 1024937 –

Antwort

90

MSDN has an article das sagt zu verwenden System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase; Wenn Sie das Verzeichnis benötigen, verwenden Sie System.IO.Path.GetDirectoryName für dieses Ergebnis.

Oder, es gibt die kürzere Application.ExecutablePath, die "den Pfad für die ausführbare Datei, die die Anwendung gestartet hat, einschließlich den Namen der ausführbaren Datei", so dass es etwas weniger zuverlässig abhängig davon, wie die Anwendung gestartet wurde bedeutet.

+25

System.Reflection.Assembly.GetExecutingAssembly() ruft nur die EXE-Assembly ab, wenn sie von dort aufgerufen wird. GetEntryAssembly() wird die richtige Assembly abrufen. – GraemeF

+4

Dies ist besonders wichtig, wenn Sie einen Windows-Dienst erstellen, da der Dienst von C: \ Windows \ System32 aus gestartet wird, sodass Sie über dieses Arbeitsverzeichnis verfügen. Ich werde stattdessen die Methode von GraemeF verwenden. – kevindaub

+48

Die oben erwähnte Methode gibt den aktuellen Pfad als URI zurück (d. H. "File: // c: \\ data"). Was funktionierte, war: 'System.Path.GetDirectoryName (Assembly.GetExecutingAssembly(). Ort));' – arikfr

35
AppDomain.CurrentDomain.BaseDirectory 
+7

Dies ist die beste, einfachste Antwort. Diese Methode funktioniert auf Linux/Mono und Windows, unabhängig vom aktuellen Verzeichnis. – raider33

1

nehme ich Datei in Konsole app .config haben und nun wie unten bin immer.

Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + "\\YourFolderName\\log4net.config"; 
+2

CurrentDirectory ist nicht garantiert das Verzeichnis, in dem die Anwendung ausgeführt wird. – Will

+3

Bitte verwenden Sie 'Path.Combine'. Es gibt eine Menge Code, der in Mono aus manuell kombinierten Pfaden wie diesem nicht richtig funktioniert. –

11
using System.Reflection; 

string myExeDir = new FileInfo(Assembly.GetEntryAssembly().Location).Directory.ToString(); 
3
var dir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

sprang ich für die am besten bewertete Antwort und fand ich nicht, was immer ich erwartet habe. Ich musste die Kommentare lesen, um zu finden, wonach ich suchte.

Aus diesem Grund poste ich die Antwort, die in den Kommentaren aufgeführt ist, um es die Belichtung zu geben, die es verdient.

1

Auf meiner Seite, habe ich mit einer Form Anwendung:

String Directory = System.Windows.Forms.Application.StartupPath; 

nimmt es die Anwendung Startpfad.