2013-03-05 40 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> 

đây là mã của tôi: Vấn đề của tôi là .NET4.5 chỉ được cài đặt nếu nó tồn tại.
tuy nhiên MCR của MATLAB được cài đặt cho dù nó có tồn tại hay không.
bạn có thể vui lòng cho tôi biết những gì xảy ra với tình trạng của tôi:trình cài đặt wix 3.7 bootstrapper Tìm kiếm đăng ký

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

sửa chữa sau khi câu trả lời của Rob:

DetectCondition="MatlabMCRPathExists OR MatlabPathExists" 

điều kiện này phải là sai lầm để cài đặt

Trả lời

4

Thuộc tính InstallCondition được sử dụng để xác định xem một gói cần phải được cài đặt trên máy tính này. Nếu đúng, gói được phép cài đặt. Nếu sai, gói đã được gỡ cài đặt. Những gì bạn muốn là thuộc tính DetectCondition để xác định xem gói đã có trên máy hay chưa.

Sửa chữa có lẽ chỉ là thay đổi Matlab ExePackage/@InstallCondition thành ExePackage/@DetectCondition.

+0

cảm ơn .i đã thay đổi thành DetectCondition nhưng nó bỏ qua việc cài đặt MatLab MCR. tôi đã gỡ cài đặt MCR và khởi động lại Máy tính của mình. đây là tệp nhật ký: "Điều kiện" (NOT MatlabPath) VÀ (NOT MatlabMCRPath) 'đánh giá là đúng ". và cũng "Gói phát hiện: MatlabMCR2012a64, trạng thái: Hiện tại, được lưu trong bộ nhớ cache: Không" điều này có nghĩa là sổ đăng ký vẫn còn ở đó? hoặc tôi có một lỗi trong mã của tôi? – Gilad

+0

tôi đã thay đổi Điều kiện của tôi thành một OR và đây là những gì tôi nhận được Điều kiện 'MatlabMCRPathExists HOẶC MatlabPathExists' đánh giá sai. tuy nhiên MCR được cài đặt – Gilad

+0

ok nvm nó giống như luôn luôn là một loại. cảm ơn nó đã được sửa! – Gilad

3

Bạn có thể sửa cuộc gọi tìm kiếm RegistrySearch của bạn như sau:

<!--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"> 

Tìm kiếm này đặt kết quả tìm kiếm thành biến MatlabPathExistsMatlabMCRPathExists.
Sau đó, kiểm tra tình trạng của bạn nên được như sau sử dụng các biến:

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

cảm ơn, Mục tiêu của tôi là cài đặt Matlab MCR chỉ khi không có MATLAB hoặc MCR được cài đặt. InstallCondition của bạn có nghĩa là cài đặt MCR nếu không tìm thấy một trong số chúng không? – Gilad

+0

@Androidy, sau đó điều kiện kiểm tra logic cần một số chỉnh sửa. Tôi chỉ sử dụng các biến chính xác trong util: RegistrySearch và sử dụng cùng một cách chính xác. Sau đó kiểm tra tình trạng của bạn có thể giống như InstallCondition = "(KHÔNG MatlabPathExists) VÀ (KHÔNG MatlabMCRPathExists)" Tôi hy vọng. – RinoTom

+0

đây là tình trạng của tôi và nó không hoạt động – Gilad

4

Đây là mã cuối cùng và làm việc của tôi:
kiểm tra mã này để cài đặt .NET 4.5. và cho Matlab R2012a hoặc 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> 
Các vấn đề liên quan