2011-10-03 10 views
6

He agregado App.Config en mi proyecto. Tengo una clase de instalador (ProjectInstaller.cs) que necesita leer valores de App.config. Proporciono las llaves. A continuación se muestra el código de ejemplo:Instalador de servicios de Windows que no lee el archivo App.Config

ConfigurationManager.AppSettings["CONFIG_FILE"] 

estoy recibiendo los valores nulos de acuerdo con el código anterior, cuando se invoca en la clase de instalación. Pero en el archivo App.Config existe el valor de la clave anterior.

+0

Consulte http://stackoverflow.com/questions/379276/windows-service-cant-access-app-config-from-within-my-installers-constructor para saber qué ocurre y cuáles son las mejores soluciones: no puede trabaje con una app.config directamente desde un instalador ya que su aplicación aún no se está ejecutando. Más bien, es 'installutil' que se está ejecutando. Tenga en cuenta, por cierto, que al escribir una pregunta, este sitio sugerirá posibles respuestas, ¡léalas! –

Respuesta

3

Google ayuda: http://social.msdn.microsoft.com/Forums/ar/winformssetup/thread/896e110e-692d-4934-b120-ecc99b01c562

el punto es que el instalador es NO funcionando como exe solo y un app.config llamada lo que imagina no se carga por defecto como el exe se ejecuta el instalador se InstallUtil .exe y sería finalmente buscar appSettings del archivo InstallUtil.exe.config que no es suya y no es lo que desea, lea lo siguiente y comprobar los enlaces ...

Si invocarlo a través de InstallUtil luego el archivo de configuración es definido como InstallUtil.exe.config que no es lo que desea. Usted podría cargar manualmente el archivo de configuración usando Configuración, pero probablemente sea un poco desordenado

El truco está en el contexto de ejecución de las clases de instalador. Si instalas tu aplicación usando InstallUtil, todo el código se ejecutará en el mismo proceso que InstallUtil.exe . Si necesita pasar algunos datos a la clase de instalador durante la implementación, debe usar los parámetros de instalación. Se pasan al instalador durante la ejecución de Install, Commit, Métodos de reversión y desinstalación por el entorno de ejecución (installutil, windows instller ...). Puede acceder a los parámetros utilizando la propiedad InstallContex de la clase de instalador.

Hay una excelente artiicle en CodeProject con respecto a los proyectos de instalación y parámetros: http://www.codeproject.com/dotnet/SetupAndDeployment.asp

Salida http://msdn2.microsoft.com/en-us/library/system.configuration.install.installcontext.aspx

+0

Gracias a Davide, he definido algunos valores clave importantes en mi App.Config. Necesito leerlos. No hay forma de que pueda obtenerlo. ¿Necesito físicamente crear un archivo xml físico? –

+0

como escribí en mi respuesta, lea este: http://www.codeproject.com/KB/install/SetupAndDeployment.aspx –

0

Para mí la solución más fácil era crear archivos InstallUtil.exe.config, y llénelo con contenido del archivo de configuración de la aplicación. El instalador de servicios leyó con éxito desde este archivo de configuración.

creé mi servicio siguiendo los pasos descritos en: Host a WCF Service in a Managed Windows Service

14

Probar:

public string GetServiceNameAppConfig(string serviceName) 
{ 
    var config = ConfigurationManager.OpenExeConfiguration(Assembly.GetAssembly(typeof(MyServiceInstaller)).Location); 
    return config.AppSettings.Settings[serviceName].Value; 
} 
+0

Esta solución funciona, y no requiere un proyecto de configuración. Gracias. –

+0

Esto funciona! Gracias – Zeeshan

Cuestiones relacionadas