2017-10-08 12 views
1

私はMSI経由でインストールされたWindowsサービスを作成しました。このサービスでは、VS2017のSettings.settingsで別のプロパティとして追加したホスト/ IP、ポート、およびパスが必要です。私は今インストーラにユーザの入力を受けて設定を自分の設定ファイルに書き込ませたいと思っています。まず始めに、私は次のことを試してみました:インストール時に設定を提供する

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

そして、私の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> 

これは、設定を保存していないので、私はGoogleに頼っ。私が見つけた最も近いものはthis questionですが、私はそれが何を示唆しているのか完全には理解していません(私はC#でかなり新しいです)。完全なServiceModelセクショングループを使用していますか?私はXMLを直接編集する方法を理解することができたと確信していますが、それは適切な方法ではなく、かわいそうになるでしょう。

答えて

1

一般的な問題は、インストーラクラスが、インストールを実行するmsiexecサービスによって呼び出されたC++ shim Dllからのリフレクションを使用してインスタンス化されることです。この環境では、アセンブリと実行可能ファイルが「正常に」読み込まれたときに実行される自動処理は行われません。つまり、設定ファイルのパスを正確に指定するだけで、Xmlの作業を自分で行う必要があります(この環境にも便利なデフォルトの作業ディレクトリがないため)。

関連する問題