2010-04-07 27 views
13

necesito para obtener la ruta (no ejecutable) donde mi aplicación se está ejecutando desde:Directorio ejecutable desde donde se ejecuta la aplicación?

System.AppDomain.CurrentDomain.BaseDirectory() 

Cuando corro con la declaración anterior & "/images/image.jpg" en mi máquina local que funciona bien pero cuando instalo la aplicación en otra máquina, dice que no puede encontrar el archivo y que hay mucha información de ruta adicional.

Solo necesito el directorio donde se ejecuta la aplicación. Estoy codificando en VB.NET con Visual Studio 2008.

¡Gracias!

+0

no sé mucho sobre vs 2008 pero cuando haces un dirinfo no obtienes el dirinfo desde donde está la aplicación. ¿Esta corriendo? – Grumpy

+0

Posible duplicado de [¿Obtener ruta de acceso de programas?] (Http://stackoverflow.com/questions/2216141/get-programs-path) –

Respuesta

26
Dim strPath As String = System.IO.Path.GetDirectoryName(_ 
    System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 

Tomado de HOW TO: Determine the Executing Application's Path (MSDN)

+6

strPath contiene ** archivo **: \\ c: \\ xxxxxx – Kraken101

+0

Esto no es seguro, por ejemplo, cuando se usa para abrir el archivo de configuración, provoca 'System.Configuration.ConfigurationErrorsException: Se ha producido un error al cargar un archivo de configuración: Los formatos URI no son compatibles' –

+0

La respuesta de MrCalvin está funcionando bien en ese caso –

0

Usted puede escribir lo siguiente:

Path.Combine(Path.GetParentDirectory(GetType(MyClass).Assembly.Location), "Images\image.jpg") 
+1

Este enfoque presenta dificultades ya que el ensamblaje no reside necesariamente en el mismo directorio que la ejecución. montaje. –

4

Se podría utilizar el StartupPath propiedad estática de la clase de aplicación.

12
Dim P As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 
P = New Uri(P).LocalPath 
20

Esta es la primera publicación en google, así que pensé en publicar diferentes formas disponibles y cómo se comparan. Desafortunadamente no puedo entender cómo crear una tabla aquí, entonces es una imagen. El código para cada uno está debajo de la imagen usando nombres completamente calificados.

enter image description here

My.Application.Info.DirectoryPath 

Environment.CurrentDirectory 

System.Windows.Forms.Application.StartupPath 

AppDomain.CurrentDomain.BaseDirectory 

System.Reflection.Assembly.GetExecutingAssembly.Location 

System.Reflection.Assembly.GetExecutingAssembly.CodeBase 

New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase) 

Path.GetDirectoryName(Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path))) 

Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path)) 
6

lo que necesitaba saber esto y vinieron aquí, antes de recordar la clase de Medio Ambiente.

En caso de que alguien más tenga este problema, simplemente use esto: Environment.CurrentDirectory.

Ejemplo:

Dim dataDirectory As String = String.Format("{0}\Data\", Environment.CurrentDirectory) 

cuando se ejecuta desde Visual Studio en modo de depuración yeilds:

C:\Development\solution folder\application folder\bin\debug 

Este es el comportamiento exacto que necesitaba, y lo suficientemente su simple y directo.

+1

¡La solución más pequeña y fácil, con formato! +1, gracias. – rdtsc

+0

Sí, esta ayuda para que la aplicación sea realmente portátil, al mantener el archivo de configuración en la ruta raíz de la aplicación. Gracias por la simple solución! –

Cuestiones relacionadas