2012-04-29 9 views
37

Tengo un servicio de Windows que debe buscar un archivo de configuración en su directorio actual.Servicio de Windows: obtenga el directorio actual

así que uso directory.getcurrentdirectiry() pero en lugar del servicio de directorio le regreso

c:\windows\system32 

Cualquier idea de por qué y cómo debo obtener el directorio de servicios?

Respuesta

6

No utilice Directory.GetCurrentDirectory(). Tuve el mismo problema exacto con C: \ Windows \ System32 que se devuelve. Use este lugar:

Path.GetDirectoryName(Application.ExecutablePath);

+0

Aparentemente necesita agregar System.Windows.Forms.dll para que esto funcione. –

+0

Me aparece "la aplicación de nombre no existe en el contexto actual" – red888

26

Prueba esto:

System.Reflection.Assembly.GetEntryAssembly().Location 
+0

Esta línea me dan el directorio que el serviec está en marcha, sino también la propia Asamblea ... sonthig como - c: \ serviceDir \ app.exe me gustaría sólo el directorio – MoShe

+0

@ Moshe: ese es el camino completo. – coder

+2

Path.GetDirectoryName (System.Reflection.Assembly.GetEntryAssembly(). Location) – VhsPiceros

88

puede establecer el directorio actual al directorio que el servicio se está ejecutando desde mediante la inclusión de esta línea en su código:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory); 

La parte importante de esto es :

System.AppDomain.CurrentDomain.BaseDirectory 

Devuelve la ruta al directorio desde el que se ejecuta su servicio.

+4

'System.AppDomain.CurrentDomain.BaseDirectory' funcionó para mí, proporciona el directorio. 'System.Reflection.Assembly.GetEntryAssembly(). Location' devuelve el directorio más el nombre del ejecutable – j00hi

+0

@ j00hi Sí, gracias por aclarar: D – Jed

+1

Esta respuesta funciona mejor para diferentes escenarios. Uso NCrunch, y la respuesta aceptada no ayudaría allí. – reydelleon

15

conseguir directorio de ruta completa:

var location = System.Reflection.Assembly.GetEntryAssembly().Location; 
var directoryPath = Path.GetDirectoryName(location); 

un problema bastante tonta cuando se compara a la escritura de un servicio de Windows :)

+0

Me ayuda. Gracias – phanvugiap

2

string applicationDir = AppDomain.CurrentDomain.BaseDirectory;

Cuestiones relacionadas