una - obtener ruta donde se ejecuta aplicacion c#
La mejor manera de obtener la ruta de la carpeta de la aplicaciĆ³n (8)
Veo que hay algunas maneras de obtener la ruta de la carpeta de la aplicación:
Application.StartupPath
-
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
-
AppDomain.CurrentDomain.BaseDirectory
-
System.IO.Directory.GetCurrentDirectory()
-
Environment.CurrentDirectory
-
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
-
System.IO.Path.GetDirectory(Application.ExecutablePath)
¿Cuál es la mejor manera dependiendo de la situación?
Application.StartupPath
y 7.System.IO.Path.GetDirectoryName(Application.ExecutablePath)
: solo funcionará para la aplicación de Windows FormsSystem.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
Te va a dar algo como:
"C://Windows//Microsoft.NET//Framework//v4.0.30319//Temporary ASP.NET Files//legal-services//e84f415e//96c98009//assembly//dl3//42aaba80//bcf9fd83_4b63d101"
que es donde está la página que está ejecutando.AppDomain.CurrentDomain.BaseDirectory
para la aplicación web podría ser útil y devolverá algo como"C://hg//Services//Services//Services.Website//"
que es el directorio base y es bastante útil.System.IO.Directory.GetCurrentDirectory()
y 5.Environment.CurrentDirectory
le proporcionará la ubicación de donde se disparó el proceso, así que para la aplicación web que se ejecuta en modo de depuración desde Visual Studio, algo como "C://Program Files (x86)//IIS Express"
-
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
obtendrá la ubicación donde está .dll
que ejecuta el código, para la aplicación web que podría ser "file://C://hg//Services//Services//Services.Website//bin"
Ahora, en el caso de, por ejemplo, los puntos de aplicación de la consola 2-6 será el directorio donde se encuentra el archivo .exe
.
Espero que esto te ahorre tiempo.
Comencé un proceso desde un servicio de Windows a través de la API de Win32 en la sesión del usuario que realmente inició sesión (en la sesión 1 del Administrador de tareas, no en 0). De esta forma podemos conocer, cuál es la mejor variable.
Para los 7 casos de la pregunta anterior, los siguientes son los resultados:
Path1: C:/Program Files (x86)/MyProgram
Path2: C:/Program Files (x86)/MyProgram
Path3: C:/Program Files (x86)/MyProgram/
Path4: C:/Windows/system32
Path5: C:/Windows/system32
Path6: file:/C:/Program Files (x86)/MyProgram
Path7: C:/Program Files (x86)/MyProgram
Tal vez sea útil para algunos de ustedes, hacer lo mismo, cuando busca la mejor variable para su caso.
Como ejemplo :
- Botón: [Nombre - ''
btn_OpenFile
''] - Tengo ''abc.exe'' que quiero abrir.
- Ruta del archivo:
C:/Users/Admin/Documents/Visual Studio 2015/Projects/MyProject/MyProject/abc.exe.
Entonces, haré lo siguiente:
- En el evento Button Click:
btn_OpenFile_Click()
Process.Start(@Environment.CurrentDirectory+"//..//..//abc.exe");
Nota: "Environment.CurrentDirectory" devuelve esta ruta: "C://Users//Admin//Documents//Visual Studio 2015//Projects//MyProject//MyProject//bin//Debug"
Por lo tanto, al colocar "//.."
esto, puede ir a un directorio superior.
He utilizado este con éxito
System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)
Funciona incluso dentro del linqpad.
Para una aplicación web, para obtener el directorio raíz de la aplicación web actual, generalmente llame por página web para la solicitud entrante actual:
HttpContext.Current.Server.MapPath();
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
Tenga en cuenta que no todos estos métodos devolverán el mismo valor. En algunos casos, pueden devolver el mismo valor, pero tenga cuidado, sus propósitos son diferentes:
Application.StartupPath
devuelve el parámetro StartupPath
(se puede configurar cuando se ejecuta la aplicación)
System.IO.Directory.GetCurrentDirectory()
devuelve el directorio actual, que puede o no ser la carpeta donde se encuentra la aplicación. Lo mismo ocurre con Environment.CurrentDirectory
. En caso de que esté utilizando esto en un archivo DLL, devolverá la ruta donde se está ejecutando el proceso (esto es especialmente cierto en ASP.NET).
este "System.IO.Path.GetDirectory (Application.ExecutablePath)" cambió a System.IO.Path.GetDirectoryName (Application.ExecutablePath)
AppDomain.CurrentDomain.BaseDirectory
es probablemente el más útil para acceder a archivos cuya ubicación es relativa al directorio de instalación de la aplicación.
En una aplicación ASP.NET, este será el directorio raíz de la aplicación, no la subcarpeta bin, que es probablemente lo que normalmente desea. En una aplicación cliente, será el directorio que contiene el ejecutable principal.
En una aplicación VSTO 2005, será el directorio que contendrá los ensamblados administrados VSTO para su aplicación, no, digamos, la ruta al ejecutable de Excel.
Los demás pueden devolver directorios diferentes según su entorno; por ejemplo, consulte la respuesta de @Vimvq1987.
CodeBase
es el lugar donde se encontró un archivo y puede ser una URL que comienza con http: //. En cuyo caso, la Location
será probablemente la caché de descarga del ensamblaje. No se garantiza que CodeBase se establezca para ensamblajes en el GAC .