2013-01-09 6 views
3

Wix/Burn (3.6 릴리스 버전)을 기반으로 사용자 지정 마법사 스타일 부트 스트 래퍼를 만듭니다. Wix 3.6 부트 스트 래퍼 코드를 기반으로합니다.사용자 지정 Wix 굽기 부트 스트 래퍼가 MSI 설치 상태를 감지하지 못함

문제는 부트 스트 래퍼에서 번들의 일부인 setup.msi의 설치 상태를 감지 할 수 없다는 것입니다.

내가 알기에, Engine이 Bootstrapper Application에서 Wix Engine의 인스턴스 인 Engine.Detect()를 호출하면됩니다. 그 시점에서 부트 스트 래퍼를 살펴볼 수 있어야합니다. 명령. 필요한 발사 조치가 무엇인지 확인하십시오.

내 번들에는 .NET 4 (웹 설치)와 my setup.msi라는 두 항목이 있습니다.

마법사를 유지 관리 모드와 설치 모드 중 하나로 설정해야하는지 판단하기위한 단계가 빠져 있다고 생각합니다.

답변

4

먼저 패키지가 검색되고 있는지 여부를 확인하려면 현재 사용자의 임시 디렉토리에서 로그 파일을 확인할 수 있습니다. 패키지가 발견되었는지 여부를 알려줍니다.

이제 유지 관리 모드와 설치 모드 중 어떤 모드로 전환 할 것인지 결정하려면 DetectPackageComplete 이벤트에 가입하여 패키지 상태를 확인할 수 있습니다. 아래 예제에서, 내 UI는 InstallEnabled와 UninstallEnabled의 두 가지 속성을 사용하여 어떤 "모드"를 사용자에게 표시할지 결정합니다. 위의

private void OnDetectPackageComplete(object sender, DetectPackageCompleteEventArgs e) 
    { 
     if (e.PackageId == "DummyInstallationPackageId") 
     { 
      if (e.State == PackageState.Absent) 
       InstallEnabled = true; 
      else if (e.State == PackageState.Present) 
       UninstallEnabled = true; 
     } 
    } 

코드 샘플은 Custom WiX Managed Bootstrapper Application을 만드는 데 필요한 최소한의 조각에 내 블로그 게시물에서입니다.

+0

감사합니다. Bryan. 나는 이것을 줄 것이다. –

+0

이 :)를 찾고 있습니다 .. Thanks @ BryanJ –

3

번들이 이미 설치되어 있는지 확인하는 가장 쉬운 방법은 WixBundleInstalled 변수를 사용하는 것입니다. Bundle이 성공적으로 설치되면 0이 아닌 값으로 설정됩니다.

또한 WiX v3.7 +에서 OnDetectBegin 콜백은 번들이 설치되어 있는지 알려주므로 정상적으로 변수를 쿼리 할 필요가 없습니다.

@BryanJ이 제안한 완전히 합리적인 해결책을 피하기 위해 유지 관리 모드를 쉽게 검색 할 수 있도록 변경되었습니다.