2011-12-15 13 views
5

Tengo un app.config¿Cómo obtener el nombre del servicio de Windows desde app.config

<appSettings> 
    <add key="ServiceName" value="HasService"/> 
    <add key="ServiceDisplayName" value="HasService"/> 
    </appSettings> 

mi clase de servicio instalador

[RunInstaller(true)] 
    public class MyServiceInstaller : System.Configuration.Install.Installer 
    { 
     public MyServiceInstaller() 
     { 
      var process = new ServiceProcessInstaller {Account = ServiceAccount.LocalSystem}; 
      var serviceAdmin = new ServiceInstaller 
      { 
       StartType = ServiceStartMode.Manual, 
       ServiceName = "HasService", 
       DisplayName = "HasService" 
      }; 
      Installers.Add(process); 
      Installers.Add(serviceAdmin); 
     } 
    } 

quiero obtener el nombre del servicio de app.config.

var serviceAdmin = new ServiceInstaller 
    { 
     StartType = ServiceStartMode.Manual, 
     ServiceName = GetServiceNameAppConfig("ServiceName"), 
     DisplayName = GetServiceNameAppConfig("ServiceDisplayName") 
    }; 

    public string GetServiceNameAppConfig(string serviceName) 
    { 
     //what should i write here? 
    } 

cómo obtener el nombre del servicio y el nombre de visualización del archivo app.config en la clase MyServiceInstaller.

+0

¿Por qué quieres hacer esto? Puedo ver un argumento para poner "cosas que podrían cambiar un día" en el archivo de configuración, pero ¿pondría seriamente el nombre de un servicio en esta categoría? También puede cambiar el archivo de configuración tanto como desee, pero a menos que reinstale el servicio (es decir, a menos que MsServiceInstaller haga sus cosas), no cambiará realmente el nombre del servicio. Esto podría ser potencialmente confuso para alguien tener que mantener. – PeteH

+0

@Pete Quiero ejecutar el servicio con dos nombres diferentes. – sinanakyazici

+0

@sinanakyazici ¡Funcionó para mí! Muchas gracias –

Respuesta

18

problema se resuelve con este código

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

esto me funciona a la perfección. – Daniel

0

Has probado esto - configurationmanager.appsettings["yourkey"]

+0

uso ConfigurationManager cuando el servicio de windows está instalado se produce un error. System.Reflection.TargetInvocationException: la excepción ha sido lanzada por el valor de una invocación. Se produjo la excepción interna System.ArgumentException con el siguiente mensaje de error : El nombre del servicio contiene caracteres no válidos, está vacío o es demasiado largo (m ax length = 80) .. – sinanakyazici

+1

Compruebe esto le será de ayuda - http: //stackoverflow.com/questions/5030416/setup-project-custom-installer-connection-string –

Cuestiones relacionadas