2009-03-23 35 views
66

Tengo dos archivos exe en la misma carpeta, puedo ejecutar exe2 desde un botón en exe1. Hoy estaba observando a un cliente en una sesión remota (servicios de terminal) y exe2 no pudo ejecutar el error "Archivo no encontrado", pero exe1 estaba en el mismo directorio cuando lo verificamos. Entonces, ¿debería usar AppDomain.CurrentDomain.BaseDirectory o System.Environment.CurrentDirectory?¿Debo usar AppDomain.CurrentDomain.BaseDirectory o System.Environment.CurrentDirectory?

Gracias

+0

@Jade M ¿Cómo estás ejecutando su exe1 en el terminal? –

+0

Quiero agregar mis dos centavos al decir que 'string.GetFullPath (path)' utiliza 'Environment.CurrentDirectory' en lugar de' CurrentDomain.BaseDirectory', para mi sorpresa. – JBSnorro

Respuesta

6

lo que tengo entendido, se debe utilizar BaseDirectory. CurrentDirectory podría cambiar en el transcurso de la ejecución del programa.

145

Si desea encontrar archivos en el mismo directorio que su aplicación, AppDomain.CurrentDomain.BaseDirectory es la elección correcta.

Environment.CurrentDirectory es un valor que puede cambiar y cambiará a lo largo de la ejecución de su aplicación. Por ejemplo, usando parámetros predeterminados, OpenFileDialog en WinForms cambiará este valor al directorio donde se seleccionó el archivo.

+6

Desearía poder votarle más de una vez en este caso. – David

+0

Utilicé el botón 1 para mostrar OpenFileDialog, luego el botón 2 para mostrar Environment.CurrentDirectory, pero aún mostrar la carpeta de depuración, ¿por qué? –

2

que suelen utilizar algo como:

  string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 
      AppPath = AppPath.Replace("file:\\", ""); 
14

AppDomain.CurrentDomain.BaseDirectory devuelve el directorio desde el que se cargó el dominio de aplicación actual. System.Environment.CurrentDirectory devuelve el directorio del sistema actual. En su caso, AppDomain.CurrentDomain.BaseDirectory es la mejor solución.

+1

Para ser claros, System.Environment.CurrentDirectory devuelve el directorio _working_ actual (específico del proceso). –

10

Debe utilizar AppDomain.CurrentDomain.BaseDirectory.

Por ejemplo, en una aplicación de servicios de Windows:

System.Environment.CurrentDirectory volverá C: \ Windows \ system32

Mientras

AppDomain.CurrentDomain.BaseDirectory volverá [Aplicación.ubicación exe]

Otro factor importante a tener en cuenta es que AppDomain.CurrentDomain.BaseDirectory es una propiedad de sólo lectura, mientras que el Environment.CurrentDirectory puede haber algo más si es necesario:

// Change the directory to AppDomain.CurrentDomain.BaseDirectory 
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory; 
0

También he pasado por esto unos días atrás, como yo estaba usando

Environment.CurrentDirectory 

ya que me estaba dando problema en el servidor de producción, sino que estaba trabajando bien con mi servidor local,

Entonces, probé con

System.AppDomain.CurrentDomain.BaseDirectory; 

Y funcionó para mí tanto en el medio ambiente.

Por lo tanto, ya que todos ellos ha dicho que siempre hay que ir con

System.AppDomain.CurrentDomain.BaseDirectory; 

como lo comprueba el directorio de dominio actual para la ruta.

echar un vistazo para obtener más información

Could not find a part of path error on server