WIX를 사용하여 Windows Installer 프로젝트를 디자인하고 있습니다. 예약 된 다음 사용자 지정 동작에 ActionResult.Success
을 반환하는 경로가 하나 있으므로 위탁 된 사용자 지정 작업이 실행되지 않으므로 설치가 실패합니다. 자세한 내용을 설명 드리겠습니다.Windows Installer 사용자 지정 작업 : 커밋 작업이 실행되지 않습니다.
기본적으로 설치와 관련하여 두 가지 커스텀 작업이 있습니다. 하나는 CommitCA이고 다른 하나는 InstallCA입니다. 실행 스케쥴은 다음과 같습니다.
컴파일 된 설치 프로그램에서 CommCA가 InstallCA보다 먼저 스케줄 된 것을 ORCA로부터 확인했습니다. CommitCA의 유형은 3585이고 InstallCA는 3703입니다 (나는 이들에 대한 참조를 찾을 수 없지만 하나는 커밋 조치로 가정하고 다른 하나는 선언 한 것처럼 행동을 취한 것입니다). 아이디어는 CommitCA에서 InstallCA에서 사용할 일부 파일을 생성합니다.
는내 InstallCA
의 구조는 다음과 같습니다
Try
' Do some work
...
Catch ex As Exception
' Log the failure into installation log
Return ActionResult.Failure
End Try
Return ActionResult.Success
다음은 혼란을 일부 제공 : 원래 나는 내가
Catch
블록에
ActionResult.Failure
반환의 라인을 가지고 있지 않은 작업 버전을 보유하고 있습니다. 다시 말해 함수는 여전히 실패를 기록하지만 예외가 발생하더라도 결국
Success
을 반환합니다. 때로는 예외가 발생하고 로그를 확인하기 때문에 사용자 지정 작업이 성공했다고 말하기 때문에 오해의 소지가 있습니다. 내가 선
그러나
Return ActionResult.Failure
을 추가 한 이유입니다, 지금은 더 이상 작동하지 않습니다! 설치 할 때마다 내 CommitCA
이 절대 실행되지 않습니다. 참고 : 내가 만든 유일한 코드 수정 InstallCA
아니지만 실제로 InstallCA
전에 예약 된 CommitCA
,. 그리고 "결코 실행되지 않는다"는 말은 함수 호출에 넣은 로그 항목을 찾을 수 없다는 것을 의미하며, MMSIBREAK
환경 변수는 전혀 작동하지 않습니다 (rundll32 프로세스에 연결하라는 창이 나타납니다). 결코 튀어 나오지 않는다). 그러나 다음 InstallCA
은 여전히 실행됩니다.
Return ActionResult.Failure
줄을 주석 처리하면 모든 항목이 다시 작동합니다. CommitCA
에 연결하면 InstallCA
이 호출됩니다.
아마도 사용자 지정 작업의 반환 결과에 대해 오해 한 부분이있을 수 있습니다. 이 상황에서 ActionResult.Failure
을 반환하지 않겠습니까? 그러나 실제로 나는 어떤 다른 장소에서도 ActionResult.Failure
을 돌려줍니다. 실제로 CommitCA
함수 자체에서 동일한 구조를 사용했습니다 : Catch
블록에 ActionResult.Failure
을 반환했습니다. 아무도 내가 잘못한 것을 말해 줄 수 있니? 나는 독서로 시작하는 것
답장을 보내 주셔서 감사합니다. 따라서 지연 CA 이전에 커밋 CA를 예약해서는 안됩니까? (그리고 물론 CommitCA가 현재 진행중인 작업을해서는 안됩니다.) 나는 "Commit"이 설치 CA 다음에 있어야하는 것처럼 들리므로 의미가 있다고 생각합니다. 그리고 나는 현재의 모든 작업을 InstallCA – tete
으로 옮겨야한다고 생각합니다. 맞습니다. –
나를 다시 말해 보겠습니다. 해당 지연된 CA보다 먼저 예약하지 마십시오. 다른 CA는 다른 모든 지연된 CA 이후 다른 단계에서 모든 커밋이 실행되므로 문제가 없습니다. –