Installer class에서 파생 된 기존 (C# 기반) Windows 서비스가 있으며 현재는 제공된 MS 명령 줄 InstallUtil을 사용하여 설치하고 제거합니다. 이 잘 작동하며 내 시스템의 일부로 AfterUninstallEventHandler 및 CommittedEventHandler 이벤트에 이벤트 처리기를 연결했습니다. 필자의 경우에는 단순히 사용자 정의 이벤트 로그에 메시지를 로깅하는 데 사용하여 설치 및 제거 날짜와 시간 및 프로그램 버전을 보여줍니다.WiX 서비스 설치 관리자 및 사용자 정의 설치 이벤트
지금은 Wix v3.5 Beta 1을 사용하여이 서비스를 포함한 많은 것을 포장하고 있으며, 제가 수동으로 InstallUtil을 대체하기 위해 Wix ServiceInstall과 ServiceControl을 사용하고 있습니다.
그러나 Wix는 서비스 설치를 위해 InstallUtil과 완전히 다른 메커니즘을 사용하는 것으로 보입니다. 이것은 Wix (서비스 프로그램에 포함 된 것과는 대조적으로)가 제어하는 서비스의 이름과 설명에 나타나며 내 이벤트는 더 이상 실행되지 않습니다 (다른 설치 메커니즘이 사용되는 경우에는).
그래서 InstallUtil과 같은 방식으로 서비스 설치를 수행 할 수 있습니까? 아니면 차이점을 설명하겠습니까? 크리스토퍼는 인수 분해 밖으로 내 코드에서 서비스와 관련된 정의를 제안하고 윅스 설치 프로젝트로 이동했다
편집. 이것은 내가 두 가지 분리 된 시스템 사이에서 정보를 공유하는 방법을 찾아야하거나 (코드와 윅스 프로젝트를 어떻게 공유할지 모르는) 방법을 찾아야하거나, 정보를 두 개의 분리 된 위치 소프트웨어 연습).
그런 다음 설치 프로그램에서 레지스트리 키 또는 app.config에 이벤트 원본의 이름을 저장하고 서비스에서 해당 값을 읽고 이벤트 로그에 액세스하도록하십시오. 나는 정말로 "매우 나쁜 소프트웨어"관행을 보지 못했다. 설치 프로그램이 이벤트 소스 "x"를 만들고 서비스가 "x"에 작성하는 서비스와 설치 프로그램 사이의 계약 일뿐입니다. 결국 이들은 MSI가 잘 처리하는 레지스트리 항목 일뿐입니다. 나쁜 습관은 MSI가 이것을 제외하고는 모든 일을하고 프로세스 코드를 사용하여 바퀴를 재발 명하는 것입니다. –
마지막 생각 : 이벤트 로그에 쓴 winforms 앱이라고 가정 해 봅시다. 관리자가 MSI를 설치했지만 프로그램을 실행 한 적이 없다고 가정 해 봅시다. 그런 다음 비 관리자가 프로그램을 시작했습니다. 이벤트 소스를 만들 수있는 권한은 어떻게 갖게됩니까? 그러나 MSI가 이벤트 소스를 생성하면 가능할 것입니다. –
좋아 .. 계약자로서 내 설치자와 서비스 사이의 관계를 설명하는 것은 나에게 도움이되는 아이디어 였고 (나는 그것에 동의한다) 그러나 내가 가지고있는 이슈를 고착 시키는데 도움이된다. 이것은 비공식 계약이다. (레지스트리 키가 계약 당사자간에 정렬되도록하려면 어떻게해야합니까?).InstallUtil 메서드는 실패하는 경향이있는 끔찍한 해킹 일 수도 있지만 필자의 경우 기본적으로 한 위치에서만 정의되는 정보 임에도 불구하고보다 공식적인 계약을 시행 할 수 있습니다. 그러나 BTW 나는 귀하의 의견에 감사 드리며 도움이됩니다! –