2017-10-08 7 views
1

J'ai créé un service Windows qui est installé via un MSI. Le service nécessite un hôte/IP, un port et un chemin pour communiquer avec lesquels j'ai ajouté des propriétés séparées dans VS2017 Settings.settings. Je veux maintenant que l'installateur prenne l'entrée de l'utilisateur et écrive les paramètres dans mon fichier de configuration. Pour commencer, j'ai essayé les éléments suivants:Fournir des paramètres de configuration au moment de l'installation

public override void Install(IDictionary stateSaver) 
    { 
     string server; 
     string port; 
     string path; 

     base.Install(stateSaver); 

     server = this.Context.Parameters["SERVER"]; 
     port = this.Context.Parameters["PORT"]; 
     path = this.Context.Parameters["PATH"]; 

     Properties.Settings.Default.server = server; 
     Properties.Settings.Default.port = port; 
     Properties.Settings.Default.path = path; 

     Properties.Settings.Default.Save(); 
    } 

Et un extrait de mon fichier app.config ...

<userSettings> 
    <myService.Properties.Settings> 
     <setting name="server" serializeAs="String"> 
      <value /> 
     </setting> 
     <setting name="port" serializeAs="String"> 
      <value /> 
     </setting> 
     <setting name="path" serializeAs="String"> 
      <value /> 
     </setting> 
    </myService.Properties.Settings> 
</userSettings> 

Cela ne sauve pas les paramètres, donc je eu recours à Google. La chose la plus proche que j'ai trouvée est this question, mais je ne comprends pas complètement ce que cela suggère (je suis assez nouveau pour C#). Est-ce que j'utilise un groupe de sections ServiceModel complet? Je suis sûr que je pourrais comprendre comment éditer le XML directement, mais ce serait une bogue et pas la bonne façon, je préfère le faire correctement.

Répondre

1

Le problème général est que les classes d'installateur sont instanciées à l'aide de la réflexion, à partir d'une DLL d'interface de programmation C++ appelée par le service msiexec effectuant l'installation. Dans cet environnement, les tâches automatiques qui se produisent lorsque les assemblages et les exécutables sont chargés "normalement" ne se produisent pas. En d'autres termes, vous devez faire le travail Xml vous-même, en spécifiant exactement le chemin du fichier de paramètres (car il n'y a pas non plus de répertoire de travail par défaut dans cet environnement).