2011-04-05 7 views
0

나는 설치 프로그램을 만들었고 나는 지금 당장 업데이트를 내놓았다. 참고로, 내 프로그램은 서비스 응용 프로그램과 dll의 두 부분으로 구성됩니다. 다른 클라이언트 응용 프로그램 중 일부는 내 DLL을 사용하고 서비스 응용 프로그램은 계속 실행됩니다.Wix 업데이트 - 내 서비스를 다시 시작할 수는 있지만 내 DLL을 사용하는 다른 응용 프로그램은 어떻게 다시 시작할 수 있습니까?

일부 응용 프로그램은 내 dll을 사용하기 때문에 업데이트를 실행하면 다시 시작 관리자가 해당 클라이언트 응용 프로그램을 다시 시작하지만 다시 시작하지 않도록하려면 MSIRESTARTMANAGERCONTROL을 '사용 안 함'으로 설정하여 다시 시작 관리자를 사용하지 않도록 설정하고 싶습니다. 내 wix 스크립트에. 이렇게하면 다른 클라이언트 응용 프로그램이 다시 시작되는 것을 방지 할 수 있습니다. 그러나 그것의 부작용은 업데이트 절차 후에 내 서비스 응용 프로그램이 다시 시작되지 않는다는 것입니다.

기본적으로 내 질문은 다른 클라이언트 응용 프로그램이 다시 시작되는 것을 방지하는 방법을 찾고 싶지만 내 서비스가 업데이트 후에 다시 시작되는지 확인하려고합니다. 무엇을 권하고 싶습니까? 모든 조언을 주시면 감사하겠습니다.

+0

내가 원하는 것을 성취 할 수있는 방법을 찾았지 만 이것이 최선의 방법인지는 확실치 않습니다. 기본적으로 나는 'InstallInitialize'액션 후에 호출 될 커스텀 액션을 생성했다. 이 사용자 지정 작업에서 나는 내 자신의 서비스를 시작합니다. 그게 효과가있는 것 같지만 누군가가 더 나은 해결책을 가지고 있다면, 글을 올려주세요! 감사. – istudy0

+0

이렇게하면 DLL 지옥을 만들 수 있습니다. 클라이언트 응용 프로그램은 여전히 ​​이전 버전의 DLL로 실행되므로 서비스 응용 프로그램은 새 버전의 DLL로 실행됩니다. 그 나쁜. 이상한 행동으로 버그를 잡기가 어려울 수 있습니다. RestartManager가 서비스와 클라이언트를 다시 시작하는 것을 처리 할 수 ​​있다면, 나는 그것과 함께 할 것을 제안 할 것이다. –

+1

_InstallInitialize_ 조치 직후 서비스 응용 프로그램을 중지하고 _InstallFinalize_ 조치 전에 다시 시작해야한다고 생각합니다. _InstallInitialize_ 후에 서비스를 시작하면 서비스가 아직 업데이트되지 않았기 때문에 서비스에서 이전 DLL 버전을 계속 사용합니다. –

답변

1

설치 빌드에서 방출 한 MSI 패키지를 후 처리해야합니다. 구성 요소가 설치 될 때 Windows Installer가 서비스를 중지하고 새 DLL을 설치 한 후 다시 시작하려면 ServiceControl 테이블에 항목을 추가해야합니다. 또한 StopServices 및 StartService 작업이 InstallExecuteSequence 테이블에 예약되도록해야합니다.

wirunsql.vbs 도구를 사용하여 관련 INSERT 쿼리를 실행하여 필요한 레코드를 추가해야합니다.

관련 문제