在引导程序中管理先决条件版本

Manage prerequisites version in bootstrapper

我想使用 visualstrudio 2015 为 C# 应用程序创建引导程序。我想为 SharedManagementObject(从 Microsoft 下载 that direct link)设置先决条件。我按照说明进行操作 the microsoft website.

有我的product.xml:

<?xml version="1.0" encoding="utf-8" ?>
<Product
  xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
  ProductCode="Custom.Bootstrapper.SharedManagementObjects2014x86">

  <RelatedProducts>
    <DependsOnProduct Code="Custom.Bootstrapper.SQLSysClrTypes2014x86" />
  </RelatedProducts>

  <PackageFiles>
    <PackageFile Name="SharedManagementObjects2014x86.msi"/>
  </PackageFiles>

  <InstallChecks>
    <MsiProductCheck Product="IsMsiInstalled" 
      Property="{4E6202DE-B996-4736-A64B-09EE2A8469E6}"/>
  </InstallChecks>

  <Commands>
    <Command PackageFile="SharedManagementObjects2014x86.msi" Arguments="">

      <InstallConditions>
        <BypassIf Property="IsMsiInstalled"
          Compare="ValueGreaterThan" Value="0"/>
        <FailIf Property="AdminUser" 
          Compare="ValueNotEqualTo" Value="True"
         String="NotAnAdmin"/>
      </InstallConditions>

      <ExitCodes>
        <ExitCode Value="0" Result="Success"/>
        <ExitCode Value="1641" Result="SuccessReboot"/>
        <ExitCode Value="3010" Result="SuccessReboot"/>
        <DefaultExitCode Result="Fail" String="GeneralFailure"/>
      </ExitCodes>
    </Command>
  </Commands>
</Product>

安装时,对话框正确要求安装 SharedManagementObjects2014x86.msi,但我有 2 个问题:

坦克你

终于找到答案了

  • 不重新安装:检查注册表

  • 根据 CPU 安装:检查 ProcessorArchitecture

我的代码:

<?xml version="1.0" encoding="utf-8" ?>
<Product
    xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
    ProductCode="Custom.Bootstrapper.SharedManagementObjects2014">

    <RelatedProducts>
        <DependsOnProduct Code="Custom.Bootstrapper.SQLSysClrTypes2014" />
    </RelatedProducts>

    <PackageFiles>
        <PackageFile Name="SharedManagementObjects2014x64.msi"/>
        <PackageFile Name="SharedManagementObjects2014x86.msi"/>
    </PackageFiles>

    <InstallChecks>
        <!-- Check registry -->
        <RegistryCheck Property="IsMsiInstalled"
         Key="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion"
         Value="Version" />
    </InstallChecks>

    <Commands>
        <!-- Install for x86 : ProcessorArchitecture = Intel -->
        <Command PackageFile="SharedManagementObjects2014x86.msi" Arguments="">    
            <InstallConditions>
                <BypassIf Property="IsMsiInstalled"
                 Compare="ValueGreaterThan" Value="0"/>
                <BypassIf Property="ProcessorArchitecture"
                 Compare="ValueNotEqualTo" Value="Intel"/>
                <FailIf Property="AdminUser" 
                 Compare="ValueNotEqualTo" Value="True"
                 String="NotAnAdmin"/>
            </InstallConditions>

            <ExitCodes>
                <ExitCode Value="0" Result="Success"/>
                <ExitCode Value="1641" Result="SuccessReboot"/>
                <ExitCode Value="3010" Result="SuccessReboot"/>
                <DefaultExitCode Result="Fail" String="GeneralFailure"/>
            </ExitCodes>
        </Command>

        <!-- Install for x64 : ProcessorArchitecture = amd64 -->
        <Command PackageFile="SharedManagementObjects2014x64.msi" Arguments="">    
            <InstallConditions>
                <BypassIf Property="IsMsiInstalled"
                 Compare="ValueGreaterThan" Value="0"/>
                <BypassIf Property="ProcessorArchitecture"
                 Compare="ValueNotEqualTo" Value="amd64"/>
                <FailIf Property="AdminUser" 
                 Compare="ValueNotEqualTo" Value="True"
                 String="NotAnAdmin"/>
            </InstallConditions>

            <ExitCodes>
                <ExitCode Value="0" Result="Success"/>
                <ExitCode Value="1641" Result="SuccessReboot"/>
                <ExitCode Value="3010" Result="SuccessReboot"/>
                <DefaultExitCode Result="Fail" String="GeneralFailure"/>
            </ExitCodes>
        </Command>
    </Commands>
</Product>