설치 프로그램은 현재 Windows 서비스 exe를 "설치"합니다. 즉, 파일을 사용자 PC에 복사하지만 시작하지는 않습니다.Wix 사용자 지정 작업 - 실행중인 Windows 서비스를 중지했다가 시작합니다.
우리 앱이 실행되면 InstallUtil을 사용하여 여러 번 서비스를 "설치"할 것이고 각 서비스 인스턴스는 다른 서비스 이름을 갖게됩니다.
우리의 앱을 업그레이드 할 때 실행중인 서비스의 수와 호출 된 서비스는 알 수 없지만 서비스 이름이 "ABCService_"로 시작한다는 것을 알고 있습니다.
그래서 저는 "stopServices"와 "startServices"라는 두 가지 VB.NET 사용자 지정 작업을 만들었습니다. 첫 번째 사용자의 PC에서 "ABCService_"로 시작하는 Windows 서비스를 검색하고 서비스가 실행 중인지 여부를 나타내는 속성과 함께 temp 폴더의 XML 파일에 이름을 저장합니다. 그러면 실행중인 각 서비스가 중지됩니다.
그런 다음 정상적인 설치가 계속 - 윈도우 서비스 exe는 반대를 할 것 등에게 두 번째 사용자 지정 작업을 업그레이드 할 것 - 그것은 XML 파일을 읽고 원래 실행중인 모든 서비스를 시작합니다.
이제 이론상 (내 마음 속에서) 이것은 잘 작동 할 것입니다.하지만 제가 가진 문제는 wix msi 코드 내에 이러한 커스텀 액션을 어디에 둘 것인지입니다. 사용자 정의 액션은 PC의 상태를 변경
<InstallExecuteSequence>
<Custom Action="CA_StopWindowsServices"
After="InstallInitialize" />
<Custom Action="CA_StartWindowsServices"
Before="InstallServices">
<![CDATA[NOT Installed]]>
</Custom>
</InstallExecuteSequence>
때문에, 그들은 InstallExecuteSequence에서에 배치 할 필요가 및 Visual Studio가 정지 조치가 InstallInitialize 난 후이어야한다라고 나에게 이야기 : 나는 현재로있어 InstallServices 전에 시작 하나 생각하는 것이 좋은 장소일지도 몰라!
그러나 이것은 msi를 실행할 때 내 문제입니다. Windows는 업그레이드해야 할 파일 중 하나 (Windows 서비스 exe)가 실행중인 서비스의 인스턴스 수에 따라 사용 중입니다. 문제는 무엇인지 알 수 있으며 따라서 사용자 지정 작업을 작성한 이유는 무엇입니까? 그러나 창문이 사용되기 전에 불평을하기 전에 그들을 막을 수있는 사람을 부를 수없는 것 같습니다!
그냥 나는 사용자 지정 작업을 정의하는 방법을 알고와 관계있는 될 수 있다고 생각 :<CustomAction
Id="CA_StopWindowsServices"
BinaryKey="CustomActionDLL"
DllEntry="CustomActionStopServices"
Execute="deferred"
Return="check" />
<CustomAction
Id="CA_StartWindowsServices"
BinaryKey="CustomActionDLL"
DllEntry="CustomActionStartServices"
Execute="commit"
Return="check" />
지금이 모든 말 - 창문이 개 서비스 인스턴스가 필요한 파일을 사용하고 불평 할 때 난 그냥 내 MSI &를 실행 대체 할 창 - 나는 창을 닫고 창을 닫을 수있는 첫 번째 옵션을 선택했다. 기본적으로 내가하려는 일이다. 그래서 또 다른 질문이있다. 창을 통해 자동으로이 작업을 수행 할 수 있습니다. 도움이된다면, msi는 실제로 화상 부츠러기에서 실행됩니다.
미리 감사드립니다.
건배,
빅 크리스.
대단히 감사드립니다. InstallValidate 전에 설치했는데 setup.exe에서 msi가 상승 된 권한으로 실행된다고 말한 것처럼 트릭을 만들었습니다 !! –