2014-11-17 1 views
1

wix installer (버전 3)를 사용하고 있습니다. msi 버전 1.99와 다른 msi 버전 2.00이 있습니다. 내 응용 프로그램은 일부 인수를 사용하여 DB를 호출하여 가져 오기 및 내보내기를 수행 할 수 있습니다. 주요 업그레이드를 수행하고 업그레이드 전후에 사용자 지정 작업을 호출하려고합니다. 이제 맞춤 동작 코드가 올바르게 작동합니다. 문제는 이전 버전에서 실행해야하는 코드가 제거되고 제거 된 후 실행 중이므로 앱을 활성화하고 백업 파일을 생성 할 수 없다는 것입니다.이전 버전을 제거하기 전에 Wix installer 메이저 업 그레 이드 코스튬 액션

간략한 설명 : 이전 버전을 제거하기 전에 사용자 지정 작업을 수행하는 시간을 어떻게 만듭니 까?

<CustomAction Id="doExport" 
       Return="check" 
       Execute="immediate" 
       BinaryKey="ImportExportBinary" 
       DllEntry="BeforeInstall" /> 

    <CustomAction Id="doImport" 
       Return="check" 
       Execute="immediate" 
       BinaryKey="ImportExportBinary" 
       DllEntry="AfterInstall" /> 

    <InstallExecuteSequence> 
    <Custom Action="doExport" Before="InstallInitialize"> NOT Installed</Custom> 
    <Custom Action="doImport" After="InstallFinalize"> NOT Installed</Custom> 
    </InstallExecuteSequence> 

편집 : 여기

의 주요 업그레이드 코드입니다 : 내가 함께 약간의 재생을 시도했습니다

<MajorUpgrade AllowDowngrades="no" 
       Schedule="afterInstallFinalize" 
       DowngradeErrorMessage='Cannot downgrade!' 
       AllowSameVersionUpgrades='yes' ></MajorUpgrade> 

"실행"속성

내가 그들에게 전화하는 방법입니다 CustomAction 요소에 대한 결과가 없습니다.

도움 주셔서 감사합니다.

답변

0

먼저 업그레이드를 수행하여 자세한 로그를 작성하여 사용자 지정 작업이 작동하고 호출되는지 확인하십시오. 즉각적으로 표시 했으므로 시스템에서 변경되기 전에 실행되므로 이전 제품이 제거되기 전에 호출됩니다. "코드가 잘 작동합니다"라고 말하면 대화 형 계정에서 실행하면됩니다. 그러나 그것은 일어나지 않습니다. 코드에서 msiexec.exe 프로세스가 실행되지 않고 작업 디렉토리가 예상 한 것과 다르며 코드가 파일의 올바른 위치에서 찾고 있지 않을 수 있습니다. 상승하지 않고 어떤 일을 할 수 없을 수도 있습니다. 그것이 할 수 있다고 생각합니다. 코드가 예상대로 작동하지 않을 기회가 많이 있습니다.

지연으로 표시 한 경우 왜 doExport가 작동하지 않는지 알 수 있습니다. MajorUpgrade 요소가 보이지 않으면 RemoveExistingProducts의 기본 일정은 afterInstallValidate입니다. 사용자 지정 작업은 InstallInitialize 이전이므로 MSI 파일의 실제 시퀀스는 쉽게 InstallValidate, RemoveExistingProducts, doExport, InstallInitialize가 될 수 있습니다.

이전 버전 제거를 수행하는 RemoveExistingProducts는 사용자 지정 작업 이전입니다.

실행 지연을 사용하려면 doExport에서 Before = "RemoveExistingProducts"를 시도하거나 MajorUpgrade에서 Schedule을 사용하여 afterInstallInitialize로 변경하고 InstallInitialize 전에 doExport를 유지하십시오.

+0

안녕하세요 @PhilDW, 나는 코드에 도달하고 그것을 실행하는 간단한 txt 로그를 가지고 있습니다. 또한 majorupgrade 요소를 추가했습니다. –

+0

코드를 실행하는 것이 아니라 코드가 작동하는지 여부입니다. 코드가 오류를 확인하지 않고 바로 통과하면 모든 것이 작동한다고 가정하면 분명히 작동하지 않습니다. 당신의 코드는 끝으로가는 예외 포수를 가지고 있을지도 모릅니다. 그렇지 않으면 성공하지 못할 수도 있습니다. 앞에서 설명한 것처럼 대화 형 계정에서 실행하는 테스트와 동일한 방식으로 코드가 실행되고 있지 않습니다. – PhilDW

+0

안녕하세요, 저는 다양한 기계에서이를 테스트했으며 정상적으로 작동합니다. –

관련 문제