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は、存在するかどうかに関係なくインストールされます。
私の状態の何が問題なのか教えていただけますか?

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

ロブの答えの後に修正:

DetectCondition="MatlabMCRPathExists OR MatlabPathExists"

インストールするには、この条件はfalseである必要があります

4

3 に答える 3

5

これが私の最終的な動作コードです。
このコードチェックは.NET4.5インストール用です。およびMatlabR2012aまたはMatlabMCRR2012aの場合。

<?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>
于 2013-03-05T23:31:44.623 に答える
4

このInstallCondition属性は、パッケージをマシンにインストールする必要があるかどうかを判断するために使用されます。trueの場合、パッケージのインストールが許可されます。falseの場合、パッケージはアンインストールされます。必要なのはDetectCondition、パッケージがマシンにすでに存在するかどうかを判別するための属性です。

修正は、おそらくMatlabExePackage/@InstallConditionをに変更することExePackage/@DetectConditionです。

于 2013-03-05T22:00:06.707 に答える
3

次のように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">

この検索は、検索結果を変数MatlabPathExistsとに設定しますMatlabMCRPathExists
次に、条件チェックは、これらの変数を使用して次のようになります。

DetectCondition="(NOT MatlabPathExists) OR (NOT MatlabMCRPathExists)"
于 2013-03-05T09:58:42.930 に答える