2009-11-01 20 views
61

Date un'occhiata a questo pseudocodice:Ottenere il percorso assoluto del file eseguibile, utilizzando C#?

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

Se io costruisco il programma di cui sopra e posizionare il file eseguibile in C:/meow/, sarebbe stampare This executable is located in C:/meow/ ogni volta che viene eseguito, a prescindere dalla directory di lavoro corrente.

Come potrei facilmente raggiungere questo obiettivo usando C#?

+0

Duplicato: 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 –

risposta

90

MSDN has an article che dice di utilizzare System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase; se hai bisogno della directory, usa System.IO.Path.GetDirectoryName su quel risultato.

Oppure, c'è il più breve Application.ExecutablePath che "Ottiene il percorso per il file eseguibile che ha avviato l'applicazione, incluso il nome dell'eseguibile", in modo che possa significare che è leggermente meno affidabile a seconda di come è stata lanciata l'applicazione.

+25

System.Reflection.Assembly.GetExecutingAssembly() sarà solo l'assemblaggio EXE se è lì che si chiama da. GetEntryAssembly() otterrà l'assembly corretto. – GraemeF

+4

Ciò è particolarmente importante se si crea un servizio di Windows perché il servizio viene lanciato da C: \ Windows \ System32, in modo da avere quel directory di lavoro. Userò invece il metodo di GraemeF. – kevindaub

+48

Il metodo sopra riportato restituisce il percorso corrente come un URI (ad esempio "file: // c: \\ dati"). Ciò che ha funzionato è stato: 'System.Path.GetDirectoryName (Assembly.GetExecutingAssembly(). Location));' – arikfr

35
AppDomain.CurrentDomain.BaseDirectory 
+7

Questa è la migliore, la risposta più semplice. Questo metodo funziona su linux/mono e Windows, indipendentemente dalla directory corrente. – raider33

1

Supponiamo che io sono .config file nella console app e ora sto ricevendo come qui di seguito.

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

CurrentDirectory non è garantito per essere la directory in cui è in esecuzione l'applicazione. – Will

+3

Utilizzare 'Path.Combine'. C'è un sacco di codice là fuori che non funziona correttamente in Mono da percorsi combinati manualmente come questo. –

11
using System.Reflection; 

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

ho saltato in per il top rated risposta e ha trovato non mi ottenere quello che mi aspettavo. Ho dovuto leggere i commenti per trovare quello che stavo cercando.

Per questo motivo sto inviando la risposta elencato nei commenti per dargli l'esposizione che merita.

1

Da parte mia, ho usato, con un'applicazione di modulo:

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

prende il percorso di avvio dell'applicazione.

Problemi correlati