Tengo dos archivos exe en la misma carpeta, puedo ejecutar exe2 desde un botón en exe1. Hoy estaba observando a un cliente durante 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 ?
Gracias
string.GetFullPath(path)
usa enEnvironment.CurrentDirectory
lugar deCurrentDomain.BaseDirectory
, para mi sorpresa.Respuestas:
Si desea buscar archivos en el mismo directorio que su aplicación,
AppDomain.CurrentDomain.BaseDirectory
es la opció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.fuente
AppDomain.CurrentDomain.BaseDirectory
devuelve el directorio desde donde se cargó el dominio de la aplicación actual.System.Environment.CurrentDirectory
devuelve el directorio del sistema actual.En tu caso
AppDomain.CurrentDomain.BaseDirectory
es la mejor solución.fuente
Deberías usar
AppDomain.CurrentDomain.BaseDirectory
.Por ejemplo, en una aplicación de servicios de Windows:
System.Environment.CurrentDirectory
devolverá C: \ Windows \ system32Mientras
AppDomain.CurrentDomain.BaseDirectory
devolverá [ubicación de Application.exe]Otro factor importante a tener en cuenta es que
AppDomain.CurrentDomain.BaseDirectory
es una propiedad de solo lectura, mientras queEnvironment.CurrentDirectory
puede ser otra cosa si es necesario:// Change the directory to AppDomain.CurrentDomain.BaseDirectory Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
fuente
Según tengo entendido, deberías usar
BaseDirectory
.CurrentDirectory
podría cambiar a lo largo de la ejecución del programa.fuente
En proyectos de prueba de Visual Studio 2010, si habilita la opción de implementación de Editar configuración de prueba, AppDomain.CurrentDomain.BaseDirectory apunta a la carpeta TestResults \ Out (no a bin \ debug). Aunque, la configuración predeterminada apunta a la carpeta bin \ debug.
Aquí encontré una respuesta convincente.
¿Por qué AppDomain.CurrentDomain.BaseDirectory no contiene "bin" en la aplicación asp.net?
fuente
Normalmente uso algo como:
string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); AppPath = AppPath.Replace("file:\\", "");
fuente
También he pasado por esto hace unos días, ya que estaba usando
ya que me estaba dando un problema en el servidor de producción pero funcionaba bien con mi servidor local,
Entonces, lo intenté con
Y funcionó para mí tanto en el Medio Ambiente.
Entonces, como todos ellos han dicho, siempre deberíamos ir con
mientras busca la ruta en el directorio del dominio actual.
echa un vistazo para más información
No se pudo encontrar una parte del error de ruta en el servidor
fuente