WiX - 安装先决条件和第三方应用程序

时间:2013-11-07 15:17:25

标签: c# visual-studio-2010 wix windows-installer prerequisites

我的C#应用​​程序有一个wix Windows Installer。事情正在发挥作用,我能够安装和卸载应用程序。但是我想要在我的应用程序中安装一些先决条件和其他第三方应用程序。

先决条件:

  1. Microsoft .NET Framework 4(x86和x64) - dotNetFx40_Full_x86_x64.exe
  2. SQL Server 2008 Express
    1. SQLEXPR_x64_ENU.EXE
    2. SQLEXPR32_x86_ENU.EXE
  3. SQL Server Compact 3.5 SP2
    1. SSCERuntime-ENU.MSI
    2. SSCERuntime-ENU-x64.msi
  4. 第三方申请:

    1. TeamViewer - TeamViewer_Setup.exe
    2. 当然,我并不是在寻找所有先决条件和第三方应用程序的完整指南。我只需要大家帮忙找出我可以如何嵌入这些exemsi设置以成为wix安装的一部分。

      此外,一些用于x64,一些用于x86,因此它应该足以处理操作系统版本和体系结构。如何用wix实现这一目标。

      我一直在互联网上搜索一段时间,似乎没有什么具体的东西可供我使用。

      我需要确保如果没有安装这些应用程序,那么软件也应该不安装。如果已安装任何先决条件或第三方应用程序,则不应再次安装。

      我想这可以使用一些wix工具完成,但我无法获得有关howto的任何具体说明。

      编辑1

      好的我安装了Microsoft .NET Framework 4 (x86 and x64),而我现在遇到的问题是我无法安装SQL Server Compact 3.5 SP2。我正在逐一做事让我更清楚。在这里,我正在分享我的代码,以便人们可以查看:

      <?xml version="1.0" encoding="UTF-8"?>
      <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
         xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
      <Bundle Name="Bootstrapper" Version="1.0.0.0" Manufacturer="Billy"
              UpgradeCode="PUT-GUID-HERE">
        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
        <Chain>
      
          <PackageGroupRef Id="Netfx4Full"/>
          <PackageGroupRef Id="SQLExpressCE"/>
      
          <!-- Install Application -->
          <MsiPackage Id="MyApplication" SourceFile="$(var.Installer.TargetPath)"/>
      
        </Chain>
      </Bundle>
      
      <Fragment>
        <!-- Check for .NET 4.0 -->
        <util:RegistrySearch Root="HKLM"
                             Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
                             Value="Version"
                             Variable="Netfx4FullVersion" />
        <util:RegistrySearch Root="HKLM"
                             Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
                             Value="Version"
                             Variable="Netfx4x64FullVersion"
                             Win64="yes" />
      
        <!-- Install .NEt 4.0 -->
        <PackageGroup Id="Netfx4Full">
          <ExePackage Id="Netfx4Full"
                      DisplayName="Microsoft .NET Framework 4.0"
                      Compressed="no"
                      Cache="yes"
                      PerMachine="yes"
                      Permanent="yes"
                      Protocol="netfx4"
                      Vital="yes"
                      SourceFile=".\prerequisites\dotNetFx40_Full_x86_x64.exe"
                      InstallCommand="/passive /norestart"
                      DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" />
        </PackageGroup>
      
        <!-- Install SQL Server CE -->
        <PackageGroup Id="SQLExpressCE">
          <MsiPackage
                    Cache="no"
                    Compressed="no"
                    ForcePerMachine="yes"
                    Permanent="yes"
                    Vital="yes"
                    SourceFile=".\prerequisites\SSCERuntime-ENU.msi"
                    InstallCondition="NOT VersionNT64 AND SqlInstance AND SqlServerInstalled AND SQLServer2008R2Installed" />
          <MsiPackage
                    Cache="no"
                    Compressed="no"
                    ForcePerMachine="yes"
                    Permanent="yes"
                    Vital="yes"
                    SourceFile=".\prerequisites\SSCERuntime-ENU-x64.msi"
                    InstallCondition="VersionNT64 AND NOT SqlInstance AND SqlServerInstalled AND SQLServer2008R2Installed" />
        </PackageGroup>
      
      </Fragment>
      </Wix>
      

      注意:以上代码会安装.NET Framework,而不会安装SQL Server Compact 3.5 SP2


      编辑-2

      在参考Tom Blodget回答之后,我已达到目前为止,但是我无法理解如何为我的SQL Exe包提供安装命令,对于我的MSI包也是如此。我也已经完成Mr. Neil Sleightholm的{​​{3}}回复,但这个回复是SQL 2012,我怎么能用SQL 2008 ServerCE做同样的事情。条件和步骤)

      <PackageGroup Id="SQLExpressCE">
        <ExePackage
                  Cache="no"
                  Compressed="no"
                  Permanent="no"
                  Vital="yes"
                  InstallCommand="/QS /ACTION=Install /IACCEPTSQLSERVERLICENSETERMS /BROWSERSVCSTARTUPTYPE=Automatic /SQLSVCSTARTUPTYPE=Automatic /FEATURES=SQL /INSTANCENAME=SQLEXPRESS /SQLSVCACCOUNT=&quot;NT AUTHORITY\Network Service&quot; /SQLSYSADMINACCOUNTS=&quot;BUILTIN\ADMINISTRATORS&quot; /AGTSVCACCOUNT=&quot;NT AUTHORITY\Network Service&quot; /SECURITYMODE=SQL /SAPWD=&quot;wegamed&quot;"
                  SourceFile=".\prerequisites\SQLEXPR32_x86_ENU.EXE"
                  DownloadUrl="http://download.microsoft.com/download/D/1/8/D1869DEC-2638-4854-81B7-0F37455F35EA/SQLEXPR_x86_ENU.exe"
                  InstallCondition="NOT SQLServer2008R2Installed AND NOT SQLServerInstalled" />
        <ExePackage DetectCondition="VersionNT64"
                  Cache="no"
                  Compressed="no"
                  Permanent="no"
                  Vital="yes"
                  InstallCommand="/QS /ACTION=Install /IACCEPTSQLSERVERLICENSETERMS /BROWSERSVCSTARTUPTYPE=Automatic /SQLSVCSTARTUPTYPE=Automatic /FEATURES=SQL /INSTANCENAME=SQLEXPRESS /SQLSVCACCOUNT=&quot;NT AUTHORITY\Network Service&quot; /SQLSYSADMINACCOUNTS=&quot;BUILTIN\ADMINISTRATORS&quot; /AGTSVCACCOUNT=&quot;NT AUTHORITY\Network Service&quot; /SECURITYMODE=SQL /SAPWD=&quot;wegamed&quot;"
                  SourceFile=".\prerequisites\SQLEXPR_x64_ENU.EXE"
                  DownloadUrl="http://download.microsoft.com/download/D/1/8/D1869DEC-2638-4854-81B7-0F37455F35EA/SQLEXPR_x86_ENU.exe"
                  InstallCondition="NOT SQLServer2008R2Installed AND NOT SQLServerInstalled" />
      </PackageGroup>
      

      但安装程序无法完成。我想这是因为安装命令一直有效,直到接受许可协议。

1 个答案:

答案 0 :(得分:15)

请参阅&#34;构建安装包捆绑包&#34;上的WiX 3.7文档。如果您使用的是MSBuild,SharpDevelop或Visual Studio(非Express),则可以使用WiX Bootstrapper项目模板。如果您更喜欢自己调用工具集命令行工具,它们就像蜡烛和灯光一样,就像构建MSI文件一样。

请参阅&#34;如何:使用刻录安装.NET Framework&#34;上的WiX 3.7文档。注意:WiX为.NET 4.0提供了两个预定义的软件包,两者都是在安装时从Microsoft下载的。一个是完整的软件包,另一个是下载软件包,只需要在用户的系统上下载。如果您不希望安装程序依赖于Internet访问,则可以编写自己的程序包,因为您必须处理任何捆绑的任意exe。显然,WiX源代码可以帮助.NET 4.0软件包,因为它具有您需要的检测条件,安装命令和卸载命令。

请参阅每个其他软件包的安装文档,以了解应将哪些软件包放入其检测条件,安装命令和卸载命令。而且,您可以选择是否在每个包中放置下载URL。

SQL Server CE

<PackageGroup Id="SQLExpressCE">
    <!-- Per http://support.microsoft.com/kb/974247, on a 64-bit system both 32-bit and 64-bit packages must be installed and be the same version. -->
    <MsiPackage
          Visible="yes"
          Cache="no"
          Compressed="no"
          ForcePerMachine="yes"
          Permanent="yes"
          Vital="yes"
          SourceFile=".\prerequisites\SSCERuntime-ENU.msi" />
    <MsiPackage
          Visible="yes"
          Cache="no"
          Compressed="no"
          ForcePerMachine="yes"
          Permanent="yes"
          Vital="yes"
          SourceFile=".\prerequisites\SSCERuntime-ENU-x64.msi"
          InstallCondition="VersionNT64" />
</PackageGroup>

WiX刻录故障排除

Burn为自己以及它运行的任何MsiPackages创建一个日志文件。检查%TEMP%文件夹。