WIX MSI : 사용자가 설치 프로그램을 다시 실행하면 "제품이 이미 설치되었습니다"라는 메시지를 표시하고 싶습니다.

Nov 17 2020

설치 프로그램이 예상대로 작동 할 때 설치 프로그램을 처음 실행하는 경우 동일한 테스트 중에 MSI 설치 프로그램을 생성하고 있습니다. 그러나 실수로 설치 프로그램을 실행하면 파일이 제거되었습니다.

이를 위해 조건을 수정하고 작업 조건에 Remove = "All"을 추가했습니다.

잘 작동하지만 제품이 이미 설치되어 있다는 메시지를 사용자에게 표시하고 싶습니다.

이를 위해 아래 코드를 추가했습니다.

<Upgrade Id='<<Upgrade Code>>'>
  <UpgradeVersion OnlyDetect='yes' Property='SELFFOUND'
    Minimum='1.0.1' IncludeMinimum='yes' Maximum='1.0.1' IncludeMaximum='yes' />
  <UpgradeVersion OnlyDetect='yes' Property='NEWERFOUND'
    Minimum='1.0.1' IncludeMinimum='no' />
</Upgrade>

<CustomAction Id='AlreadyUpdated' Error='[ProductName] is already installed.' />
    .....
    .....
    .....
    .....
    .....
<InstallExecuteSequence>
  <Custom Action='AlreadyUpdated' After='FindRelatedProducts'>SELFFOUND</Custom>
</InstallExecuteSequence>

그러나 이것을 실행할 때 설치 프로그램은 두 번째로 여전히 실행 중이며 메시지를 제공하지 않습니다.

로그를 확인하면 "FindRelatedProducts"가 아래 메시지와 함께 건너 뛴 것을 볼 수 있습니다.

MSI (c) (F4:1C) [06:18:04:806]: Doing action: FindRelatedProducts
MSI (c) (F4:1C) [06:18:04:806]: Note: 1: 2205 2:  3: ActionText 
Action 6:18:04: FindRelatedProducts. Searching for related applications
Action start 6:18:04: FindRelatedProducts.
MSI (c) (F4:1C) [06:18:04:806]: Skipping FindRelatedProducts action: not run in maintenance mode
Action ended 6:18:04: FindRelatedProducts. Return value 0.

MSI (s) (18:14) [06:18:05:500]: Running ExecuteSequence
MSI (s) (18:14) [06:18:05:500]: Doing action: FindRelatedProducts
MSI (s) (18:14) [06:18:05:500]: Note: 1: 2205 2:  3: ActionText 
Action 6:18:05: FindRelatedProducts. Searching for related applications
Action start 6:18:05: FindRelatedProducts.
MSI (s) (18:14) [06:18:05:507]: Skipping FindRelatedProducts action: already done on client side
Action ended 6:18:05: FindRelatedProducts. Return value 0.

이미 업데이트 된 사용자 지정 작업의 조건도 충족되지 않습니다.

MSI (s) (18:14) [06:18:05:737]: Doing action: PublishProduct
MSI (s) (18:14) [06:18:05:737]: Note: 1: 2205 2:  3: ActionText 
Action 6:18:05: PublishProduct. Publishing product information
Action start 6:18:05: PublishProduct.
PublishProduct: 
MSI (s) (18:14) [06:18:05:752]: Re-publishing product - installing new package with existing product code.
Action ended 6:18:05: PublishProduct. Return value 1.
MSI (s) (18:14) [06:18:05:752]: Skipping action: AlreadyUpdated (condition is false)

이 요구 사항을 달성 할 수있는 방법이 있습니까? 내가 뭘 잘못하고 있니?

답변

1 SteinÅsmul Nov 19 2020 at 06:34

사용자 지정 작업 복잡성 : 먼저 사용자 지정 작업과 그 복잡성에 대해 설명합니다. 여기에서 첫 번째 단락을 읽으십시오. WiX / MSI 설정에서 사용자 지정 동작의 사용을 제한하는 것이 좋은 이유는 무엇입니까?


잘못된 컨디셔닝 : 기본적으로 조건이 잘못되어 사용자 지정 작업이 실행되지 않아야하는 설치 모드에서 실행됩니다. 당신은 당신이 복잡한 조건 (또는 그 문제에 대한 모든 조건을)를 사용하려고 할 때에 테스트해야 많은 설치 모드가 있습니다 :1. fresh install,2. repair,3. modify,4. self-repair,5. patching,6. uninstall,7. major upgrade invoked uninstall, 등 ...

귀하의 경우 일부 사용자 지정 작업은 유지 관리 실행 및 새로 설치 / 처음 설치 중에 실행됩니다. 이것은 매우 일반적인 문제입니다. 해결책은 설정을 개선하여 사용자 지정 작업을 제거하거나 실제로 모든 설치 모드에서 작동하도록 조건을 개선하는 것입니다. 명백하게.

조건 디버깅 : 조건을 제대로 잡기 가 어렵습니다. 메시지 상자를 사용하여 테스트하는 것을 좋아합니다. 여기 하단 섹션에서는이를 수행하는 방법을 보여줍니다 . 설치 및 수정시 조건부 사용자 지정 작업을 실행하는 방법은 무엇입니까? -그런 다음 다른 모드에서 설정을 실행하고 대화 상자를 찾습니다. 그들이 표시되면 사용자 지정 작업에 대한 조건이 참입니다.

복잡한 조건 : 새 설정에 이전 사용자 지정 작업이 사용되는 이유에 대한 답변입니다 : Wix 도구 업데이트는 이전 사용자 지정 작업을 사용 합니다.

  • 다른 설치 모드에서 공통 속성에 대한 몇 가지 값을 나열하는 답변도 있습니다. 제거시에만 발생하는 WiX 사용자 지정 작업을 추가하는 방법 (MSI를 통해)?
  • Installshield에는 다음과 같은 일반적인 조건의 PDF가 있습니다 (일부는 Installshield에만 해당). https://resources.flexera.com/web/pdf/archive/IS-CHS-Common-MSI-Conditions.pdf

예상치 못한 동작 : 속성UPGRADINGPRODUCTCODEWIX_UPGRADE_DETECTED. 읽어 보세요 : Wix 사용자 지정 작업은 주요 업그레이드가 아닌 제거 중에 만 실행 합니다.이러한 단점은 주요 업그레이드 시나리오에서 사용자 지정 작업이 실행되는 횟수에 영향을줍니다. 사람들에게 매우 놀라운 효과가 있습니다. 메시지 상자 디버깅을 사용 하시겠습니까?

연결:

  • wix 설치 프로그램 업데이트 프로세스 및 확인 대화 상자
  • Wix 사용자 지정 제거 작업-MSI가 파일을 제거하기 전에 실행하는 방법
  • Wix 설치 프로그램에서 cutomAction DriverPackageInstall을 사용하여 드라이버 설치
  • WIX CustomAction 조건
  • UPGRADINGPRODUCTCODE, WIX_UPGRADE_DETECTED에서 MSI 속성을 가져 오지 못했습니다.
  • 설치시 재부팅, 제거시 재부팅하지 않음