2010-07-19 20 views
5

Tengo un servicio de Windows que está instalado en C: \ Windows \ System32. Tiene un archivo .config habitual, donde se almacenan algunas configuraciones de la aplicación. Tengo otra aplicación que escribe algunos valores en esta configuración. Cuando corro esta aplicación se lanza una excepción en esta líneaexePath es una excepción no válida en ConfigurationManager.OpenExeConfiguration

var config = ConfigurationManager.OpenExeConfiguration(serviceExePath);

La excepción dice: produjo un error al cargar un fichero de configuración: El parámetro 'ExePath' no es válido. Nombre del parámetro: exePath

Cuando coloco el servicio de Windows en otra carpeta, todo está bien. ¿Es debido a algunas reglas de violación de acceso o algo así? ¿Hay alguna forma de usar la carpeta System32 para mi servicio y abrir su configuración?

SO: Windows 7 x64

+0

puede explicar por qué usted está poniendo en system32? Normalmente lo pondría en un subdirectorio Archivos de programa o similar, por lo que explicar el objetivo de usar System32 puede ayudar a obtener una recomendación para una mejor ubicación –

Respuesta

6

Es una mala elección para una ubicación de archivo. Ese directorio pertenece a Windows, no es adecuado para sus propias aplicaciones. Por un lado, necesitarás privilegios de administrador para abrir archivos en ese directorio. No obtienes eso sin un manifiesto para activar el aviso de UAC.

Por otro lado, ese directorio está virtualizado en la versión x64 de Windows. Una aplicación de 32 bits que intente acceder a los archivos se redireccionará a c: \ windows \ syswow64.

Podría haber sido más preciso si ha publicado el seguimiento de la pila. Pero, simplemente no lo hagas.

6

Tenga en cuenta que, a pesar de que el nombre del parámetro sea 'exePath', debe pasar el nombre del archivo .config, por lo que puede necesitar agregar '.config' según lo que se encuentre en la carpeta serviceExePath.

http://msdn.microsoft.com/en-us/library/ms224437.aspx

ExePath

Tipo: System.String

La ruta del archivo de configuración. El archivo de configuración reside en el mismo directorio que el archivo ejecutable.

Tal como está, tengo la sensación de que está tratando de cargar el .exe real como un archivo de configuración, lo que sin duda explica por qué se considera inválida :)

+1

De .NET 3.5 en adelante, el comentario para 'exePath' en el enlace que proporcionado es "La ruta del archivo ejecutable (exe)". Supongo que lo hicieron lo suficientemente inteligente como para encontrar el archivo .config de eso. – Zack

+0

@Zack agradable, buena captura. –

Cuestiones relacionadas