Il programma di installazione del servizio Windows non legge il file App.Config

Ho aggiunto App.Config nel mio progetto. Ho una class di installazione (ProjectInstaller.cs) che ha bisogno di leggere i valori da App.config. Sto fornendo le chiavi. Di seguito è riportato il codice di esempio:

ConfigurationManager.AppSettings["CONFIG_FILE"] 

Sto ottenendo valori nulli come da codice precedente, quando invocato nella class Installer. Ma nel file App.Config esiste il valore per la chiave sopra.

Provare:

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

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

il punto è che il tuo programma di installazione NON è in esecuzione come exe e un app.config chiamato qualunque cosa tu immagini non verrà caricato di default come l’exe che esegue il tuo programma di installazione è InstallUtil.exe e alla fine cercherà appSettings dal file InstallUtil.exe. config che non è tuo e non è quello che vuoi, leggi quanto segue e controlla i link …

Se lo invochi tramite InstallUtil, il file di configurazione è definito come InstallUtil.exe.config che non è quello che desideri. È ansible caricare manualmente il file di configurazione usando Configuration ma sarà probabilmente un po ‘disordinato

Il trucco è nel contesto di esecuzione delle classi di installazione. Se si installa l’app utilizzando InstallUtil, tutto il codice verrà eseguito nello stesso processo di InstallUtil.exe. Se è necessario passare alcuni dati alla class Installer durante la distribuzione, è necessario utilizzare i parametri di installazione. Vengono passati al programma di installazione durante l’esecuzione dei metodi Installa, Conferma, Rollback e Disinstalla dall’ambiente di esecuzione (installutil, windows instller …). È ansible accedere a questi parametri utilizzando la proprietà InstallContex della class di installazione.

C’è un eccellente articolo su CodeProject relativo ai progetti e ai parametri di installazione: http://www.codeproject.com/dotnet/SetupAndDeployment.asp

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

Davide Piras ha spiegato molto bene, perché non è ansible utilizzare app.config e suggerisce di passare i valori come parametri.

Ho trovato un articolo carino e utile su come passare parametri a installutil.exe e usarli nel projectInstaller o projectInstaller :

Parte 1: utilizzo dei parametri con InstallUtil

Parte 2: configurazione di servizi Windows con parametri da InstallUtil

Spiega molto presto come passare argomenti e come leggerli.

Per me la soluzione più semplice era creare il file InstallUtil.exe.config e riempirlo con il contenuto del file di configurazione dell’applicazione. Il programma di installazione del servizio ha letto correttamente da questo file di configurazione.

Ho creato il mio servizio seguendo i passaggi descritti in: Host di un servizio WCF in un servizio Windows gestito