2014-07-15 9 views
1

저는 Wix 화상에 신참입니다. 여러 msi를 설치하고 체크 박스와 버튼이있는 하나의 패널로 구성된 UI를 가진 wix Bootstrapper Application (BA)을 만들고 있습니다. 을 설치하십시오. 각 확인란을 선택하면 msi를 선택/선택 취소하고 사용자가 "설치"를 누르면 나의 BA가 검사 된 msi를 설치해야합니다. 주요 .wxs 파일 내 체인 요소에서wix 부트 스트 래퍼 응용 프로그램 - 확인란에 여러 패키지를 설치하십시오.

, 나는 예 또는 아니오 사용자가이를 선택하지 여부를 결정하기 위해 조건 속성 MsiPackage 요소를 사용할 계획입니다.

내 질문은 : 이러한 조건 속성을 확인란과 인터페이스하는 방법은 무엇입니까? 또는 다른 말로하면 : Wix .wxs 파일에 체크 박스 정보를 얻는 방법?

+0

[UI에서 UI로 MSI로가는 WiX - checkbox 값] 가능한 복제본 (http://stackoverflow.com/questions/15296980/wix-passing-checkbox-values-from-burn-ui-to-msi) –

답변

1

내가 어떻게하는지 설명 할 수있다. 더 좋은 방법이 있기를 바랍니다. 내 checkBox는 ViewModel 클래스의 속성에 바인딩됩니다. 속성의 설정자에서 checkBox 값이 변경되면 Bundle.wxs 파일에 변수 의 값을 설정합니다.

private bool _installApp1Checked; 
public bool InstallApp1Checked 
{ 
    get { return _installApp1Checked; } 
    set 
    { 
    _installApp1Checked = value; 
     if (value == true) 
     { 
      Bootstrapper.Engine.StringVariables["InstallApp1"] = "1"; 
     } 
     else 
     { 
      Bootstrapper.Engine.StringVariables["InstallApp1"] = string.Empty; 
     } 
     RaisePropertyChanged("InstallApp1Checked"); 
    } 
} 

private bool _installApp2Checked; 
public bool InstallApp2Checked 
{ 
    get { return InstallApp2Checked; } 
    set 
    { 
    _installApp2Checked = value; 
     if (value == true) 
     { 
      Bootstrapper.Engine.StringVariables["InstallApp2"] = "1"; 
     } 
     else 
     { 
      Bootstrapper.Engine.StringVariables["InstallApp2"] = string.Empty; 
     } 
     RaisePropertyChanged("InstallApp2Checked"); 
    } 
} 

private bool _installApp3Checked; 
public bool InstallApp3Checked 
{ 
    get { return _installApp3Checked; } 
    set 
    { 
    _installApp3Checked = value; 
     if (value == true) 
     { 
      Bootstrapper.Engine.StringVariables["InstallApp3"] = "1"; 
     } 
     else 
     { 
      Bootstrapper.Engine.StringVariables["InstallApp3"] = string.Empty; 
     } 
     RaisePropertyChanged("InstallApp3Checked"); 
    } 
} 

그리고 Bundle.wxs에

나는이 :

<Wix ...> 
    <Bundle ...> 
... 
    <Chain> 
     ... 
     <MsiPackage> 
     ... 
     <MsiProperty Name="InstallApp1" Value="[InstallApp1]"/> 
     <MsiProperty Name="InstallApp2" Value="[InstallApp2]"/> 
     <MsiProperty Name="InstallApp3" Value="[InstallApp3]"/> 
     ... 
     </MsiPackage> 
     </Chain> 
    </Bundle> 
</Wix> 

태그를 사용하여 뷰 모델 클래스의 속성이 WSX 파일에서 사용할 수 있습니다. 그런 다음이 값은 내 product.wxs에 설치의 순간에 사용할 수 있습니다

<Product > 
... 

    <Property Id="InstallApp1"> 
    </Property> 
    <Property Id="InstallApp2"> 
    </Property> 
    <Property Id="InstallApp3"> 
    </Property> 
    <Feature Id="ProductFeature" Title="Alvenos" Level="0"> 
     <ComponentRef Id="ProductComponents" /> 
     <Condition Level="1">InstallApp1</Condition> 
    </Feature> 
    <Feature Id="AlvenosVSIXFeature" Title="Alvenos" Level="0"> 
     <ComponentRef Id="AlvenosVsix" /> 
     <Condition Level="1">InstallApp2</Condition> 
    </Feature> 
    <Feature Id="AlvenosServerVSIXFeature" Title="Alvenos" Level="0"> 
     <ComponentRef Id="AlvenosServerVsix" /> 
     <Condition Level="1">InstallApp3</Condition> 
    </Feature> 

... 
</Product> 

당신은 응용 프로그램을 의미 즉, 0으로 설정되어있는 기능 태그의 레벨 속성의 기본 값을 볼 수 있습니다 istalled되지 않습니다. 그러나 조건 태그 InstallApp [1], [2] 또는 [3]이 1로 설정되면 Level이 1로 설정되고 응용 프로그램이 설치됩니다. ComponentRef를 사용하여 설치할 앱의 대상 폴더에 대한 정보가 들어있는 Component 태그를 참조하십시오.

<Fragment> 
    <ComponentGroup Id="InstallApp1" Directory="[target directory id]> 
     <Component Id="ProductComponent"> 
     <File Source="[your app part of the installer]" /> 
     </Component> 
     ... 
    </Fragment> 

아이디어를 얻길 바랍니다.

+0

고마워, 아이디어가있어! 그러나 일부 msi 재배포 소유자가 아니므로 msi를 편집하고 "InstallAppX"조건을 추가 할 수 없습니다 ... 어떻게 해결할 수 있습니까? – Brainless