2011-12-15 21 views
5

Mam app.configJak uzyskać nazwę usługi Windows z app.config

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

moja klasa instalator usługi

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

chcę uzyskać nazwę usługi z 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? 
    } 

jak uzyskać nazwę usługi i nazwę wyświetlaną usługi z pliku app.config w klasie MyServiceInstaller.

+0

dlaczego chcesz to zrobić? Widzę argumenty za umieszczeniem w pliku konfiguracyjnym "rzeczy, które mogą zmienić jeden dzień", ale czy na pewno chcesz nazwać usługę w tej kategorii? Możesz także zmienić plik konfiguracyjny tak, jak chcesz, ale dopóki nie zainstalujesz ponownie usługi (tzn. Jeśli MsServiceInstaller nie zrobi czegoś takiego), nie zmienisz nazwy usługi. Może to być mylące dla kogoś, kto musi go utrzymywać. – PeteH

+0

@ Później chcę uruchomić usługę z dwoma różnymi nazwami. – sinanakyazici

+0

@sinanakyazici To działało dla mnie! Wielkie dzięki –

Odpowiedz

18

problem został rozwiązany z tym kodem

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

to działa dla mnie doskonale. – Daniel

0

masz próbowałem - configurationmanager.appsettings["yourkey"]

+0

Używam programu ConfigurationManager podczas instalacji systemu Windows pojawia się błąd. System.Reflection.TargetInvocationException: Wyjątek został zgłoszony przez ten rget wywołania. Wyjątek wyjątek System.ArgumentException został zgłoszony z następującym komunikatem o błędzie : Nazwa usługi zawiera nieprawidłowe znaki, jest pusta lub jest za długa (m długość ax = 80) .. – sinanakyazici

+1

Sprawdź, czy to pomoże - http: //stackoverflow.com/questions/5030416/setup-project-custom-installer-connection-string –

Powiązane problemy