installValidate 전에 remove -ExistingProducts 사용자 정의 조치를 예약해도 괜찮습니까?

StackOverflow https://stackoverflow.com/questions/2057936

  •  20-09-2019
  •  | 
  •  

문제

문제

설치 중에 Windows 서비스를 생성하고 시작하는 MSI가 있습니다. 설치 중에 서비스를 중지하고 제거합니다. 이것은 자체적으로 설치하고 제거 할 때 제대로 작동하지만 업그레이드 할 때 사용중인 파일 대화 상자가 표시됩니다 (Vista에서만 및 나중에는 새로운 것 때문에 관리자를 다시 시작합니다), 서비스가 사용되고 있음을 나타냅니다.

배경

그만큼 사용중인 파일 대화 상자가 표시됩니다 installexecute sequence by the installvalidate 직전에 예정된 사용자 정의 액션 ExistingProducts를 제거하십시오 맞춤 행동; 이것은 이전 버전이 아직 제거되지 않았 음을 의미하므로 사용중인 파일 대화 ~해야 한다 표시됩니다.

MSDN 문서는 다음을 나타냅니다 ExistingProducts를 제거하십시오 조치는 다음에 예약되어야합니다 installvalidate 행동, 그리고 나는 현재입니다 ExistingProducts를 제거하십시오 직후 예정된 조치 installvalidate 동작.

잠재적 인 솔루션

일정을 변경하고 싶습니다 ExistingProducts를 제거하십시오 직전 직전에 맞춤 조치 installvalidate 이전 설치가 서비스를 중지하고 제거 할 수있는 사용자 정의 조치 사용중인 파일 대화 상자가 표시됩니다. 나는 동작을 일정 조정을 시도했지만 부작용없이 올바르게 작동하는 것으로 보인다 (로그는 여전히 installvalidate 액션은 전에 실행됩니다 ExistingProducts를 제거하십시오 Action), 그러나이 솔루션은 MSDN 문서를 위반하기 때문에이 솔루션을 사용하는 것을 주저합니다. 아직 보지 못하는 부작용이있을 수 있습니다.

누구든지 이것을 시도한 사람이 있습니까? 내가 생각할 수있는 유일한 다른 대안은 새 설치가 이전 설치의 서비스를 중지하는 것이지만, 업그레이드 할 수있는 모든 기존 설치에 대한 정보를 갖기 위해 설치가 필요하기 때문에 바람직하지 않습니다 (이 특정 서비스를 중지하면 더 이상 관련 될 수 있습니다. 서비스 관리자에게 간단한 전화를 걸어 중지하는 것보다).

도움이 되었습니까?

해결책

질문에 설명 된 잠재적 솔루션을 구현했습니다. ExistingProducts를 제거하십시오 직전에 installvalidate. 아직 아무런 문제도 보지 못했지만 설치가 더 많이 사용 된 후 다시 게시하겠습니다.

업데이트

우리의 설치는 한동안 이것을 사용하고 있었으며, 아무런 영향도 눈치 채지 못했습니다.

다른 팁

이미 MSI / Windows 설치 프로그램에 구축되었습니다. 유일한 문제는 .NET 설치 프로그램 클래스가 MSI "서비스 설치"기능을 사용하지 않는다는 것입니다. 실제로 일어나고있는 것은 MSI가 방금 복사 한 파일을 사용하여 파일을 설치하고 사용자 정의 명령을 실행하려고한다는 것입니다 (모든 Visual Studio가 MSI에 넣는 것).

이를 해결하려면 ORCA로 MSI를 편집하고 다음 행을 Servicecontrol 테이블:

1   ServiceName 170     1   C__489628C5CC1144CB47F43E8BE7F3F31D

파일 테이블에서 조회 할 수있는 구성 요소 ID ... 기본 EXE 파일의 구성 요소 ID를 선택했습니다. 170은 Windows Installer에게 설치 및 제거시 서비스를 중지하고 삭제하도록 지시하는 비트 맵입니다.

이렇게하면 .NET 설치 프로그램이 서비스를 추가 할 수있는 도로가 제거되며 ServiceController를 사용하여 사용자 정의 명령을 통해 설치된 후 서비스를 시작할 수 있습니다.

잠재적 인 문제 중 하나는 사용자가 installvalidate (예 : 디스크 공간이 충분하지 않아서 사용중인 파일로 인해) 또는 설치 중에 롤백 동작이 무엇인지 취소하는 경우입니다. 이상적인 상황은 응용 프로그램 상태가 이전과 동일하다는 것입니다 (예 : 이전 응용 프로그램이 설치됨). 롤백은 당신이없이 살 수있는 기능 일 수 있지만 시퀀싱을 포기할 수 있습니다.

나는 이것이 MSDN 문서를 위반하지 않고 당신을 도울 것이라고 생각하고 향후 문제를 피할 것이라고 생각합니다. "설치 또는 previouseversinsindstalled"조건을 넣으면 PreverversinStalled 속성이 FindRelatedProducts 중에 설치하기 전에 설정되기 때문에 업그레이드에 좋습니다. 나는 왜 그런지 모르겠지만 이전 버전이 설치된 재산은 MSDN에 문서화되어 있지 않지만 존재하고 매우 도움이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top