2013-03-05 5 views
7
<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" 
    xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" 
    xmlns:netfx='http://schemas.microsoft.com/wix/NetFxExtension'> 

    <Bundle Name="IPDev" Version="0.6" Manufacturer="MYAPP Corporation" UpgradeCode="f380ae43-5df1-4cfe-9297-526e3e638e57"> 
     <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" /> 
     <Chain> 
      <!-- TODO: Define the list of chained packages. --> 
      <PackageGroupRef Id="Netfx45FullPackage"/>  
     </Chain> 
    </Bundle> 
    <Fragment> 
    <!--checking for matlab 2012a installation--> 
    <util:RegistrySearch Id="MatlabPath" 
      Variable="UniqueId" 
      Root="HKLM" 
      Key="SOFTWARE\MathWorks\MATLAB\4.17\" 
      Result="exists" 
      Win64="yes" 
      /> 
    <!--checking for matlab MCR 2012a 64 bit installation--> 
    <util:RegistrySearch Id="MatlabMCRPath" 
      Variable="UniqueId" 
      Root="HKLM" 
      Key="SOFTWARE\MathWorks\MATLAB Compiler Runtime\7.17\" 
      Result="exists" 
      Win64="yes" 
      /> 
    <PackageGroup Id="Netfx45FullPackage"> 

    <ExePackage Id="Netfx45Xxx" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" 
     SourceFile="..\SetupProject\dotnetfx45_full_x86_x64.exe" 
     DetectCondition="(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))" 
     InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))"/> 
    <ExePackage Id="MatlabMCR2012a64" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" 
     SourceFile="..\SetupProject\MCR_R2012a_win64_installer.exe" 
     InstallCondition="(NOT MatlabPath) OR (NOT MatlabMCRPath)"/> 
    <MsiPackage Id="IPDev" Cache="no" Compressed="no" DisplayInternalUI="yes" Vital="yes" SourceFile="..\SetupProject\bin\Release\IPDevSetup.msi"/> 

    </PackageGroup> 
    </Fragment> 
</Wix> 

여기 내 코드 : 내 문제는 .NET4.5가 설치된 경우에만 설치된다는 것입니다.
그러나 MATLAB의 MCR은 존재 여부와 관계없이 설치됩니다.
wix installer 3.7 부트 스트 래퍼 레지스트리 검색

DetectCondition="MatlabMCRPathExists OR MatlabPathExists" 

이 조건은 당신이 할 수있는

답변

4

. true이면 패키지를 설치할 수 있습니다. false이면 패키지가 제거됩니다. 원하는 것은 DetectCondition 속성으로 패키지가 이미 시스템에 있는지 여부를 판별하는 것입니다.

아마도 수정은 Matlab ExePackage/@InstallConditionExePackage/@DetectCondition으로 변경하는 것일뿐입니다.

+0

감사 .i가 DetectCondition으로 변경되었지만 MatLab MCR 설치를 건너 뜁니다. MCR을 제거하고 내 컴퓨터를 다시 시작했습니다. 이것은 로그 파일입니다 : "조건 '(MatlabPath가 아님) AND (NOT MatlabMCRPath)'가 참으로 평가됩니다." 또한 "Detected package : MatlabMCR2012a64, state : Present, cached : None"은 레지스트리가 아직 있음을 의미합니다. 또는 내 코드에 버그가 있습니까? – Gilad

+0

나는 내 조건을 OR로 바꾸었고 이것이 'MatlabMCRPathExists 또는 MatlabPathExists'조건이 거짓으로 평가되는 조건입니다. 그러나 MCR이 설치되었습니다. – Gilad

+0

ok nvm 항상 유형과 같았습니다. 고마워요. – Gilad

3

를 설치하기 위해 거짓해야

InstallCondition="(NOT MatlabPath) AND (NOT MatlabMCRPath)" 

수정 롭의 대답 후 : 내 상태에 문제가 있는지 말씀 해주십시오 수
아래와 같이 RegistrySearch 호출을 수정하십시오 :

<!--checking for matlab 2012a installation--> 
<util:RegistrySearch Id="MatlabPath" 
     Variable="MatlabPathExists" 
     Root="HKLM" 
     Key="SOFTWARE\MathWorks\MATLAB\4.17\" 
     Result="exists"/> 
<!--checking for matlab MCR 2012a 64 bit installation--> 
<util:RegistrySearch Id="MatlabMCRPath" 
     Variable="MatlabMCRPathExists" 
     Root="HKLM" 
     Key="SOFTWARE\MathWworks\MATLAB Compiler Runtime\7.17\" 
     Result="exists"/> 
<PackageGroup Id="Netfx45FullPackage"> 

이 검색은 변수 MatlabPathExistsMatlabMCRPathExists으로 검색 결과를 설정합니다.
그런 다음 조건 검사가이 변수를 사용하여 다음과 같이해야 다음 InstallCondition 속성이 패키지가 시스템에 설치해야하는지 여부를 결정하는 데 사용됩니다

DetectCondition="(NOT MatlabPathExists) OR (NOT MatlabMCRPathExists)" 
+0

감사합니다. 내 목표는 MATLAB 또는 MCR이 설치되어 있지 않은 경우에만 Matlab MCR을 설치하는 것입니다. InstallCondition은 MCR이 설치되어 있지 않은 경우 MCR을 설치한다는 의미입니까? – Gilad

+0

@Androidy이면 조건 ​​검사 논리에 약간의 수정이 필요합니다. 방금 util : RegistrySearch에서 올바른 변수를 사용하고 올바르게 동일하게 사용했습니다. 그런 다음 조건 확인은 InstallCondition = "(MatlabPathExists가 아닌) AND (NOT MatlabMCRPathExists)"와 같을 수 있습니다. – RinoTom

+0

이것은 내 조건이고 작동하지 않습니다. – Gilad

4

여기 내 최종 코드가 있습니다.
이 코드 검사는 .NET 4.5 설치입니다. 및 Matlab R2012a 또는 Matlab MCR R2012a의 경우.

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" 
    xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" 
    xmlns:netfx='http://schemas.microsoft.com/wix/NetFxExtension'> 

    <Bundle Name="IPDev" Version="0.6" Manufacturer="Intel Corporation" UpgradeCode="f380ae43-5df1-4cfe-9297-526e3e638e57"> 

     <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" /> 
     <Chain> 

      <!-- TODO: Define the list of chained packages. --> 
      <PackageGroupRef Id="Netfx45FullPackage"/>  
     </Chain> 
    </Bundle> 
    <Fragment> 

     <!--checking for matlab 2012a installation--> 
    <util:RegistrySearch Id="MatlabPath" 
      Variable="MatlabPathExists" 
      Root="HKLM" 
      Key="SOFTWARE\MathWorks\MATLAB\4.17" 
      Result="exists" 
      Win64="yes" /> 
    <!--checking for matlab MCR 2012a 64 bit installation--> 
    <util:RegistrySearch Id="MatlabMCRPath" 
      Variable="MatlabMCRPathExists" 
      Root="HKLM" 
      Key="SOFTWARE\MathWorks\MATLAB Compiler Runtime\7.17" 
      Result="exists" 
      Win64="yes" /> 
    <PackageGroup Id="Netfx45FullPackage"> 


    <ExePackage Id="Netfx45Xxx" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" 
     SourceFile="..\SetupProject\dotnetfx45_full_x86_x64.exe" 
     DetectCondition="(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))" 
     InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))"/> 
    <ExePackage Id="MatlabMCR2012a64" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" 
     SourceFile="..\SetupProject\MCR_R2012a_win64_installer.exe" 
     DetectCondition="MatlabMCRPathExists OR MatlabPathExists"/> 
    <MsiPackage Id="IPDev" Cache="no" Compressed="no" DisplayInternalUI="yes" Vital="yes" SourceFile="..\SetupProject\bin\Release\IPDevSetup.msi"/> 

    </PackageGroup> 
    </Fragment> 
</Wix>