2012-10-10 3 views
3

2msi (msi1, msi2)를 캡슐화하는 번들을 만들었습니다. UI에서 나는 어떤 MSI를 설치할 것인지 선택하도록 사용자에게 요청하는 체크 박스를 사용합니다.Wix Burn 문제 : "Found dependent"라는 메시지가 표시되지 않음

사용자가 설치할 msi 중 하나를 선택하면 설치가 정상적으로 진행됩니다. 그러나 제거 작업을하는 동안, 굽기 로그 파일은 말한다 :

[][:15]: Detected package: Netfx4Full, state: Present, cached: None 

[][:15]: Detected package: DummyInstallationPackageId3, state: **Absent**, cached: None 

[][:15]: Detected package: msi2.msi, state: **Present**, cached: Complete 

[][:15]: Detect complete, result: 0x0 
[][:16]: Plan 3 packages, action: Uninstall 
[][:16]: Will not uninstall package: msi2.msi, found dependents: 1 
[][:16]: Found dependent: {08e74372-83f2-4594-833b-e924b418b360}, name: My Test Application 

설치 시나리오에서, 나는 msi1을 msi2를 설치하지하기로 결정했습니다.

내 번들 코드는 보이는 같은 :

<Bundle Name="My Test Application" Version="1.0.0.0" Manufacturer="Bryan" UpgradeCode="CC2A383C-751A-43B8-90BF-A250F7BC2863"> 

<Chain> 

<PackageGroupRef Id='Netfx4Full' /> 

<MsiPackage Id="DummyInstallationPackageId3" 
SourceFile="msi1.msi" 
ForcePerMachine="yes" 
InstallCondition="var1 = 1" 
> 
</MsiPackage> 

<MsiPackage 
SourceFile="msi2.msi" 
Vital="yes" Cache="yes" Visible="no" 
ForcePerMachine="yes" 
InstallCondition="var2 = 2" 
> 
</MsiPackage> 
</Chain> 

내 OnDetectPackageComplete()과 같은 : 내가 지금 무엇을해야

private void OnDetectPackageComplete(object sender, DetectPackageCompleteEventArgs e) 
    { 
    if (e.PackageId == "DummyInstallationPackageId3") 
    { 
     if (e.State == PackageState.Absent) 
     InstallEnabled = true; 

     else if (e.State == PackageState.Present) 
     UninstallEnabled = true; 
    } 
    } 

굽기 번들 자유롭게 MSI를하는 사용자를 제거 할 수 있는지 설치시 선택됩니다. 게다가 설치를 위해 msi를 둘 다 선택하면 제거가 정상적으로 작동합니다.

IMO, 번들과 2msi의 관계에 약간의 문제가 있습니다. 내가이 문제에 갇혀있는 것처럼 나를 도와주세요.

답변

4

첫 번째 Burn 부트 스트 래퍼를 만들면 많은 시행 착오에서 레지스트리가 엉망이 될 수 있습니다. 해야 (: ({08e74372-83f2-4594-833b-e924b418b360} 예) 및 그 열쇠를

  • 제거 응용 프로그램을 삭제

    1. 는 "부양 가족"에 대한 레지스트리를 검색 : 나는 다음과 같은 시도 제안 succeed)
    2. 레지스트리에서 이전에 설치 한 다른 .msi의 제품 코드를 검색하십시오. 레지스트리에 없는지 확인하십시오. 존재하는 경우 해당 키를 삭제하십시오.
    3. 다시 설치하고 ok를 제거 할 수 있는지 확인하십시오.
  • +0

    해결 방법에 동의하지만 내 modelView 코드에 문제가 있습니다. 내가 잘 된 msi2.msi 만 설치했다고 가정 해보십시오. 이제 제거 할 때, 내가 진행했을 때; 내가 얻은 UI에는 "설치"버튼이 활성화되어 있습니다. "DummyInstallationPackageId3"(msi1.msi)이 설치되어 있지 않으므로 "설치"단추가 활성화됩니다. 이 문제를 해결할 수있는 방법이 있습니까? 나는 주로 당신의 블로그에서 주어진 예를 따랐다. –

    +0

    그런 경우 InstallEnabledPackageId3 및 InstallEnabledPackageId2와 같은 패키지마다 속성을 가질 수 있습니다. 그런 다음 설치 단추를 InstallEnabled에 바인딩하고 public bool처럼 정의하십시오. InstallEnabled {get {return (InstallEnabledPackageId3 && InstallEnabled PackageId2)? 허위 사실; }} – BryanJ

    +0

    2 개의 부울을 사용하면 문제를 해결하는 데 도움이됩니다. 나는 문제가 더 복잡한 wrt 'dependency'라고 희망하고 있었다. 그러나 msi2.msi의 개별 설치/제거조차도 문제가 없습니다. Thnx. 비록 Burn이 개별 msi에 대한 종속성으로 "번들 이름"을 등록하는 것이 궁금합니다. 화상 기록에 그 정보를 봤어. –

    관련 문제