Quiero crear un programa que convierta archivos. Me gustaría que el usuario pueda colocar el archivo ejecutable en cualquier directorio, y al ejecutar ese programa (haciendo doble clic en el .exe) quiero que el programa procese todos los archivos dentro de la carpeta actual donde existe el archivo exe . ¿Cómo puede el programa determinar la ruta en la que se está ejecutando actualmente?
Lo intenté System.Windows.Forms.Application.StartupPathpero parece ser el camino equivocado.
¿Algunas ideas?

GetEntryAssemblyyGetExecutingAssemblyno es una gran sorpresa, también es obvia por el nombre de la función. Si hicieron lo mismo, ¿por qué debería haber dos funciones? :-)System.Reflection.Assembly.GetExecutingAssembly().Locationes el completo, si está probando desde la ventana InmediatoEsto le dará el directorio en ejecución de su aplicación. Esto incluso funciona para aplicaciones web. Luego puede llegar a su archivo.
fuente
Creé una aplicación de consola simple con el siguiente código:
Copié el ejecutable resultante en
C:\temp2. Luego coloqué un acceso directo a ese ejecutableC:\temp3y lo ejecuté (una vez desde el propio exe y otra desde el acceso directo). Dio las siguientes salidas en ambas ocasiones:Si bien estoy seguro de que debe haber alguna razón para explicar por qué hay cinco métodos diferentes que hacen exactamente lo mismo, ciertamente no sé qué es. Sin embargo, parecería que, en la mayoría de las circunstancias, usted es libre de elegir el que desee.
ACTUALIZACIÓN: Modifiqué las propiedades de acceso directo, cambiando el campo "Iniciar en:" a
C:\temp3. Esto dio como resultado el siguiente resultado:... que demuestra al menos algunas de las distinciones entre los diferentes métodos.
fuente
Prueba esto:
System.Environment.CurrentDirectoryfuente
Environment.CurrentDirectoryse puede cambiar de varias maneras ... (configuración de shotrtcut, etc.)De
Path.GetDirectoryNameDe
Application.ExecutablePathfuente
Utilizar este,
Puedes usar esto también.
fuente
para uso .NET CORE
System.AppContext.BaseDirectory(como reemplazo de
AppDomain.CurrentDomain.BaseDirectory)fuente
1)
2)
3)
fuente
Environment.CurrentDirectoryse puede cambiar de varias maneras ... (configuración de shotrtcut, etc.)Úselo
Application.StartupPathpara obtener el mejor resultado imo.fuente
Si quieres la ruta exe puedes usar
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);fuente
Esto funciona mejor para mí, especialmente cuando utilizo la publicación de archivos únicos de dotnet core.
Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName).fuente