2017-03-27 3 views
1

"INSTALLTHIS ="YES ""기능을 설치하려고합니다. 속성 "INSTALLTHIS"는 처음에 "NO"로 설정됩니다. 조치 "test_command"가 "INSTALLTHIS"도 "YES"로 설정합니다. "test_command2"의 메시지 상자는이 속성의 값이 "YES"로 설정되었음을 보여줍니다. 설치하지 않으면 "INSTALLTHIS ="YES ""가 참이므로 "ProductFeature"가 설치 될 것으로 예상됩니다. WIX - 조건부로 기능 설치

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
<Product Id="*" Name="test" Language="1033" Version="1.0.0.0" Manufacturer="test_wix" UpgradeCode="351b96ea-a1af-4542-8be9-9e8e07878a99"> 
     <Property Id="INSTALLTHIS" Value="NO" Secure="yes"></Property> 

     <Feature Id="ProductFeature" Title="SetupProject1" Level="0"> 
      <ComponentRef Id="ClientSoftware" />   
      <Condition Level="1"> 
       <![CDATA[INSTALLTHIS="YES"]]> 
      </Condition> 
     </Feature> 

     <CustomAction Id="test_command" Script="vbscript"> 
      <![CDATA[   
       Session.Property("INSTALLTHIS") = "YES" 
      ]]> 
     </CustomAction> 

     <CustomAction Id="test_command2" Script="vbscript"> 
      <![CDATA[   
       MsgBox(Session.Property("INSTALLTHIS")) <!-- SAYS YES IN THE MESSAGE BOX --> 
      ]]> 
     </CustomAction> 

    <InstallExecuteSequence> 
      <Custom Action="test_command" After="CostFinalize">NOT Installed</Custom> 
      <Custom Action="test_command2" After="test_command">NOT Installed</Custom> 
    </InstallExecuteSequence> 
</Product> 

답변

1

은 무엇 당신이 찾고있는 것은 가능하지 않을 (필자는 디렉토리 설정, ComponentGroup, 구성 요소 등의 불필요한 XML을 제거). 비슷한 질문에이 answer을보십시오. 기능 조건은 다른 것보다 먼저 평가됩니다. 귀하의 경우에는 기능 상태가 평가 될 때 INSTALLTHIS = "NO"를의 L합니다. 연결된 접근법은 비록 그 접근법을 사용하지는 않았지만 잠재적 인 해결책을 제공합니다. 우리는이 동작이 필요할 때 작업하는 설치 프로그램에서 부트 스트 래퍼의 속성을 전달하는 솔루션을 제공했습니다.

2

발생하는 문제는 주로 주문 중 하나입니다. 기능 조건은 비용 계산 중 (특히 CostFinalize 작업 중에) 처리됩니다. 원가 계산이 완료되면 더 이상 효과가 없습니다. 즉, 이와 같은 방식으로 기능 조건 및 수준을 사용하지 않는 것이 좋으며, 특히 Level="0"이 관련되어있는 경우에는주의해야합니다. (레벨 = "0"은 운영 체제의 비트처럼 절대 변하지 않는 것들에만 안전합니다.)

사용자가 명령 줄을 전달하여 기능을 조건부로 설치할 수있게하려면 설치 프로그램의 기능. 그런 다음 그들은 ADDLOCAL=list,of,features을 전달할 수 있습니다. 대신 기능의 설치 상태를 변경하지 않고 개별 구성 요소를 제어하려는 경우 구성 요소에 조건을 지정할 수 있습니다. 그러나 그것들은 또한 원가 계산 중에 처리되기 때문에, 당신은 여전히 ​​당신의 순서를 돌봐야합니다.

참고로 속성을 설정하기 위해 VBScript 동작을 사용하지 마십시오. 이 작업은 실제 작업을 간소화하는 것으로 가정하지만 그렇지 않은 경우 SetProperty 작업을 대신 사용하십시오. (일반적으로 모든 경우에 VBScript 작업을 피하는 것이 좋지만 더 복잡한 작업을 변경하면 어려움이 많아 위험이 커지므로 이러한 결정을 내려야합니다.)