2017-10-08 9 views
1

MSI를 통해 설치된 Windows 서비스를 만들었습니다. 이 서비스에는 VS2017 Settings.settings에서 별도의 속성으로 추가 한 호스트/IP, 포트 및 경로가 필요합니다. 나는 이제 설치 프로그램이 사용자 입력을 받아 설정 파일에 설정을 쓰게하고 싶다. 우선, 나는 다음과 같은 시도 :이 설정을 저장하지 않습니다설치시 구성 설정 제공

<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> 

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 파일에서 추출 ..., 그래서 구글에 의존. 내가 찾은 가장 가까운 것은 this question이지만, 나는 그것이 무엇을 제안하는지 완전히 이해하지 못한다. (나는 C#을 처음 사용했다.) 전체 ServiceModel 섹션 그룹을 사용하고 있습니까? 나는 XML을 직접 편집하는 방법을 이해할 수있을 것이라고 확신하지만 그것은 교묘하고 올바른 방법이 아니라 오히려 올바르게 할 것이다.

답변

1

일반적으로 설치 관리자 클래스는 설치를 수행하는 msiexec 서비스에서 호출되는 C++ shim Dll에서 리플렉션을 사용하여 인스턴스화됩니다. 이 환경에서 어셈블리와 실행 파일이 "정상적으로"로드 될 때 진행되는 자동 작업은 발생하지 않습니다. 즉, 설정 파일 경로를 정확히 지정하여 Xml 작업을 직접 수행해야합니다 (이 환경에도 유용한 기본 작업 디렉토리가 없으므로).