2011-12-15 15 views
5

Ho un app.configCome ottenere il nome del servizio Windows da app.config

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

mia classe di servizio di installazione

[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); 
     } 
    } 

voglio ottenere il nome del servizio da 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? 
    } 

Come ottenere il nome del servizio e la visualizzazione del servizio di denominazione da app.config file in classe MyServiceInstaller.

+0

perché si vuole fare questo? Posso vedere un argomento per inserire "cose ​​che potrebbero cambiare un giorno" nel file di configurazione, ma metteresti seriamente il nome di un servizio in questa categoria? Inoltre è possibile modificare il file di configurazione quanto si desidera, ma a meno che non si reinstalli il servizio (ad esempio, a meno che MsServiceInstaller non faccia il proprio), in realtà non si cambierà il nome del servizio. Ciò potrebbe potenzialmente creare confusione per qualcuno da mantenere. – PeteH

+0

@Pete voglio eseguire il servizio con due nomi diversi. – sinanakyazici

+0

@sinanakyazici Ha funzionato per me! Grazie mille –

risposta

18

problema è risolto con questo codice

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

questo funziona perfettamente per me. – Daniel

0

Hai provato questo - configurationmanager.appsettings["yourkey"]

+0

io uso ConfigurationManager quando il servizio Windows è installato si verifica un errore. System.Reflection.TargetInvocationException: l'eccezione è stata lanciata dal ta di un richiamo. L'eccezione interna System.ArgumentException è stata generata con il seguente messaggio di errore : Il nome del servizio contiene caratteri non validi, è vuoto o è troppo lungo (m lunghezza dell'asse = 80) .. – sinanakyazici

+1

Controlla che ti possa aiutare - http: //stackoverflow.com/questions/5030416/setup-project-custom-installer-connection-string –

Problemi correlati