주요 업그레이드에서만 실행할 수있는 사용자 지정 작업이 있습니다. 문제는 CA가 시스템 파일에 대한 액세스가 필요하기 때문입니다 (INI 파일에서 이전 버전의 프로그램을 제거함). CA는 지연되므로 CustomActionData 속성에만 액세스 할 수 있습니다.Wix : 조건부 지연된 사용자 지정 작업
따라서 첫 번째 시도는 UPGRADINGPRODUCTCODE가 true이면 CustomActionData를 설정 한 다음 CustomActionData에서 실제로 업그레이드를 수행 한 CA를 조정하는 것이 었습니다. 그게 실패했습니다 - CustomActionData가 설정되지 않았습니다. 내에서 사용자 정의 작업 인 내에서만 볼 수 있으며 사용자 정의 작업의 조건으로 사용할 수 없기 때문에 가정합니다.
다음이있는 CA의 내가 정의 :
<CustomAction Id="MyCA.SetProperty" Return="check" Property="MyCA"
Value="[UPGRADINGPRODUCTCODE]" />
<CustomAction
Id="MyCA"
BinaryKey="MyIniProcessingProgram"
ExeCommand="MyArgs"
Execute="deferred"
Impersonate="no"
Return="ignore"/>
을 그리고 여기 내 InstallExecuteSequence에서이다 : 나는 또한 시도
<RemoveExistingProducts After="InstallValidate" />
<Custom Action="MyCA.SetProperty" Before="InstallFinalize"/>
<Custom Action="MyCA" After="MyCA.SetProperty">
CustomActionData
</Custom>
:
- UPGRADINGPRODUCTCODE에 MyCA.SetProperty 조건부 만들기, MyCA.SetProperty가 실행되지 않아도 "After"작업이 수행되기 때문에 MyCA를 예약하면 작동하지 않습니다.
JavaScript/VBScript 작업을 피할 수 있거나 INI 업데이트 프로그램 자체에서 CustomActionData 값을 확인하는 것이 가장 좋습니다. CA 자신을 조건부로 만드는 것이므로 조건 (주요 업그레이드)이 참이 아닌 한 우리는 실행하지 않습니다.
아, 내 새 버전에는 UPGRADINGPRODUCTCODE가 설정되지 않은 것이 당연합니다. 액션이 연기 되었기 때문에 그것이라고 생각했지만, 그 속성은 업그레이드 된 _ 버전에서만 설정되기 때문입니다. ActionProperty를 향해 나를 가르쳐 주셔서 고맙습니다. 문제가되는 부분을 쉽게 해결할 수있었습니다. –