2009-11-01 17 views
61

Tener un vistazo a este pseudocódigo:Obteniendo la ruta absoluta del ejecutable, usando C#?

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

Si construyo el programa anterior y colocar el ejecutable en C:/meow/, sería imprima This executable is located in C:/meow/ cada vez que se ejecuta, sin importar el directorio de trabajo actual.

¿Cómo podría lograrlo fácilmente usando C#?

+0

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

Respuesta

90

MSDN has an article que dice usar System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase; si necesita el directorio, use System.IO.Path.GetDirectoryName en ese resultado.

O bien, existe la Application.ExecutablePath más corta que "Obtiene la ruta del archivo ejecutable que inició la aplicación, incluido el nombre del ejecutable", lo que podría significar que es ligeramente menos confiable según la forma en que se lanzó la aplicación.

+25

System.Reflection.Assembly.GetExecutingAssembly() solo obtendrá el ensamblado EXE si es allí desde donde se llama. GetEntryAssembly() obtendrá el ensamblaje correcto. – GraemeF

+4

Esto es especialmente importante si crea un servicio de Windows porque el servicio se inicia desde C: \ Windows \ System32, por lo que tendrá ese directorio de trabajo. Usaré el método de GraemeF en su lugar. – kevindaub

+48

El método mencionado anteriormente devuelve la ruta actual como un URI (es decir, "archivo: // c: \\ datos"). Lo que funcionó fue: 'System.Path.GetDirectoryName (Assembly.GetExecutingAssembly(). Location));' – arikfr

35
AppDomain.CurrentDomain.BaseDirectory 
+7

Esta es la mejor y más simple respuesta. Este método funciona en Linux/mono y Windows, independientemente del directorio actual. – raider33

1

Supongamos que tengo .config de aplicación de consola y ahora estoy recibiendo, como a continuación.

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

No se garantiza que CurrentDirectory sea el directorio en el que se está ejecutando la aplicación. – Will

+3

Por favor, use 'Path.Combine'. Hay un montón de código que no funciona correctamente en Mono desde rutas combinadas manualmente como esta. –

11
using System.Reflection; 

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

Salté por la respuesta más valorados y me encontré no conseguir lo que esperaba. Tuve que leer los comentarios para encontrar lo que estaba buscando.

Por esa razón estoy publicando la respuesta que figura en los comentarios para darle la exposición que merece.

1

Por mi parte, he usado, con una aplicación de formulario:

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

se toma la ruta de inicio de la aplicación.

Cuestiones relacionadas