【问题标题】:Wix & Burn - Install IIS if not yet installedWix & Burn - 如果尚未安装,请安装 IIS
【发布时间】:2014-06-26 20:26:16
【问题描述】:

我有一个使用 IIS 的项目,我想用 Wix 为它创建一个安装程序。我已经成功地为应用程序创建了 .msi 安装程序,我正在为它创建一个 Bundle 安装程序,它将安装先决条件,然后安装我的应用程序。

这是捆绑包的代码:

<?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">
  <Bundle Name="Bootstrapper" Version="1.0.0.0" Manufacturer="VilmosNagy" UpgradeCode="844c755f-f02b-4dd3-8b9c-af2498f3128c">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
    <Chain>
      <PackageGroupRef Id="NetFx45Web"/>
      <PackageGroupRef Id="SQLServerExpress"/>
      <!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
    </Chain>
  </Bundle>
</Wix>

我的问题是,如果未安装 IIS,我该如何安装(或启用?)?

谢谢!

【问题讨论】:

    标签: iis wix burn


    【解决方案1】:

    基于Harbinder Singhanswer,这是我的解决方案:

    <?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">
        <Bundle Name="Bootstrapper" Version="1.0.0.0" Manufacturer="VilmosNagy" UpgradeCode="844c755f-f02b-4dd3-8b9c-af2498f3128c">
            <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
    
        <Chain>
          <PackageGroupRef Id="InstallIIS"/>
        </Chain>
        </Bundle>
      <Fragment>    
        <PackageGroup Id="InstallIIS">
          <ExePackage
                      Id="IIS_part0"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-WebServerRole"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-WebServerRole"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part1"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-WebServer"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-WebServer"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part2"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-CommonHttpFeatures"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-CommonHttpFeatures"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part3"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-StaticContent"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-StaticContent"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part4"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-DefaultDocument"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-DefaultDocument"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part5"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-DirectoryBrowsing"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-DirectoryBrowsing"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part6"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-HttpErrors"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-HttpErrors"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part7"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-HttpRedirect"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-HttpRedirect"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part8"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-ApplicationDevelopment"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-ApplicationDevelopment"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part10"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-NetFxExtensibility"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-NetFxExtensibility"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part12"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-ISAPIExtensions"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-ISAPIExtensions"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part11"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-ASP"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-ASP"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part13"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-ISAPIFilter"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-ISAPIFilter"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part9"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-ASPNET"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-ASPNET"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part14"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-HealthAndDiagnostics"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-HealthAndDiagnostics"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part15"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-HttpLogging"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-HttpLogging"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part16"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-LoggingLibraries"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-LoggingLibraries"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part17"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-RequestMonitor"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-RequestMonitor"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part18"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-HttpTracing"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-HttpTracing"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part19"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-CustomLogging"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-CustomLogging"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part20"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-Security"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-Security"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part21"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-WindowsAuthentication"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-WindowsAuthentication"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part22"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-RequestFiltering"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-RequestFiltering"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part23"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-IPSecurity"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-IPSecurity"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part24"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-Performance"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-Performance"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part25"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-HttpCompressionStatic"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-HttpCompressionStatic"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part26"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-WebServerManagementTools"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-WebServerManagementTools"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part27"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-ManagementConsole"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-ManagementConsole"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part28"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-ManagementScriptingTools"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-ManagementScriptingTools"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part29"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: IIS-ManagementService"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:IIS-ManagementService"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part30"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: WAS-WindowsActivationService"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:WAS-WindowsActivationService"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part31"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: WAS-ProcessModel"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:WAS-ProcessModel"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part32"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: WAS-NetFxEnvironment"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:WAS-NetFxEnvironment"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part33"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: WAS-ConfigurationAPI"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:WAS-ConfigurationAPI"
                      >
          </ExePackage>
          <ExePackage
                      Id="IIS_part34"
                      SourceFile="run.bat"
                      DisplayName="Installing IIS: NetFx3"
                      InstallCommand="dism.exe /Online /Enable-Feature /FeatureName:NetFx3"
                      >
          </ExePackage>
        </PackageGroup>
      </Fragment>
    </Wix>
    

    run.bat 文件是一个简单的文本文件,包含%*

    此解决方案仅适用于 Windows 7 或更高版本,因为dism.exe 不是版本 7 之前的 Windows 的一部分。

    【讨论】:

    • 不确定是否有更好的方法,但对我来说,我不得不将 'dism.exe' 替换为 'C:\WINDOWS\SYSNATIVE\DISM.EXE' (似乎使用 32 位时)应该一直使用 64 位?可能我的引导程序没有运行正确的版本?
    • 我想你可以在这里看到解释:stackoverflow.com/a/26422001/2891426
    【解决方案2】:

    @Nagy Vilmos,您的解决方案不适用于 64 位操作系统。刻录是32 位 程序。它将启动 32 位“dism.exe”,即使您希望它通过在 64 位操作系统上提供完整路径“C:\Windows\System32\dism.exe”来运行 64 位 dism。这是由“File System Redirector”引起的。

    dism 的日志会告诉您它是 32 位还是 64 位。打开文件“C:\Windows\Logs\DISM\dism.log”你会发现这样的信息:

    主机信息:操作系统版本=6.1.7600,运行架构=x86

    或者,

    主机信息:操作系统版本=6.1.7600,运行架构=amd64

    当您尝试在 64 位操作系统上运行 32 位磁盘时,您会收到此错误

    错误:11 您无法使用 32 位版本的 DI 为正在运行的 64 位操作系统提供服务 SM。 请使用与您的计算机体系结构相对应的 DISM 版本。 DISM 日志文件位于 C:\Windows\Logs\DISM\dism.log

    我的解决方案是创建另一个 WiX 安装程序项目“InstallPrerequisites”并使用“QtExec64CmdLine”运行 64 位 dism。这是一个例子:

    <!--1.You need to use the x64 version of quiet command line     
        2.[System64Folder] is also needed. If not, QtExec64CmdLine will find a 32-bit dism.exe to run.
    -->
    <Property Id="QtExec64CmdLine" Value='"[System64Folder]dism.exe" /Online /Apply-Unattend:[ProductTmpFolder]iis_unattend.xml'/>
    <CustomAction Id="SilentLaunch" BinaryKey="WixCA" DllEntry="CAQuietExec64" Execute="immediate" Return="check" />
    

    我使用应答文件来包含所有功能,因此我们可以一次性启用它们。然后链接安装程序

    <MsiPackage DisplayName="Install Prerequisites" SourceFile="$(var.InstallPrerequisites.TargetPath)" />
    

    更新: 通过使用“C:\windows\SysNative\dism.exe”,我现在可以避免为 x64 平台创建单独的项目。从日志中可以看到32位进程现在正在运行64位DISM。

    2015-10-26 16:28:07, Info  DISM  DISM.EXE: <----- Starting Dism.exe session ----->
    2015-10-26 16:28:07, Info  DISM  DISM.EXE: 
    2015-10-26 16:28:07, Info  DISM  DISM.EXE: Host machine information: OS Version=6.1.7601, Running architecture=amd64, Number of processors=4
    2015-10-26 16:28:07, Info  DISM  DISM.EXE: Executing command line: C:\windows\SysNative\dism.exe
    2015-10-26 16:28:07, Info  DISM  DISM Provider Store: PID=2000 Getting the collection of providers from a local provider store type. - CDISMProviderStore::GetProviderCollection
    ....
    2015-10-26 16:28:09, Info  DISM  DISM.EXE: Image session has been closed. Reboot required=no.
    2015-10-26 16:28:09, Info  DISM  DISM.EXE: 
    2015-10-26 16:28:09, Info  DISM  DISM.EXE: <----- Ending Dism.exe session ----->
    

    【讨论】:

    • 要使其在 64 位操作系统上运行,只需按照 here 的说明调用 DISM 即可避免重定向。
    • @omatrot 它有效,我已经更新了答案。谢谢!
    【解决方案3】:

    试试下面的 CustomAction 代码:-

        <Property Id="INSTALLIISPROP" Value="C:\Windows\System32\dism.exe" />
    
        <CustomAction 
          Id="InstallIISCA"
          Return="check"
          Property="INSTALLIISPROP"
          Execute="deferred"
          HideTarget="yes"
          Impersonate="yes"
          ExeCommand="/Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-CommonHttpFeatures /FeatureName:IIS-StaticContent /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-HttpErrors /FeatureName:IIS-HttpRedirect /FeatureName:IIS-ApplicationDevelopment /FeatureName:IIS-ASPNET /FeatureName:IIS-NetFxExtensibility /FeatureName:IIS-ASP /FeatureName:IIS-ISAPIExtensions /FeatureName:IIS-ISAPIFilter /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HttpLogging /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-RequestMonitor /FeatureName:IIS-HttpTracing /FeatureName:IIS-CustomLogging     /FeatureName:IIS-Security /FeatureName:IIS-WindowsAuthentication /FeatureName:IIS-RequestFiltering /FeatureName:IIS-IPSecurity /FeatureName:IIS-Performance /FeatureName:IIS-HttpCompressionStatic     /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-ManagementConsole /FeatureName:IIS-ManagementScriptingTools /FeatureName:IIS-ManagementService /FeatureName:WAS-WindowsActivationService /FeatureName:WAS-ProcessModel /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ConfigurationAPI /FeatureName:NetFx3" />
    
        <InstallExecuteSequence>
           <Custom Action="InstallIISCA" Before="InstallFinalize">
              <![CDATA[NOT Installed AND IISMAJORVERSION]]>
           </Custom>
        </InstallExecuteSequence> 
    

    【讨论】:

    • 我应该把这个 CustomAction 代码放在哪里?在链标签内?还是?
    • 这需要位于 Product.Wxs 文件中的 Product 标签下。
    • 是的,但我想将 IIS 安装程序放入刻录包中,而不是 .msi 文件中。 (我的 Burn 包包含 SQLExpress、.NET、IIS 的安装程序和我项目的 .msi 安装程序)。但是感谢 dism.exe 文件及其命令,我想我用它解决了问题。
    • 注意这里的执行命令文本格式不正确——启用功能命令需要是/online /enable-feature:IIS-WebserverRole或者/online /enable-feature /featurename:IIS-WebserverRole /featurename:&lt;features name&gt;注意没有分号
    • 如果您打算将 IIS 仅用作 Asp.NET Core Kestrel 的反向代理,那么您只需要以下 3 个功能:/FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-WebServerRole /FeatureName :IIS-ManagementConsole
    【解决方案4】:

    IIS 功能启用对我有用。

    <!-- Put the following Code inside Product tag -->
    <UI>
      <UIRef Id="WixUI_HK" />
        <ProgressText Action="InstallIIS">Enabling IIS Feature</ProgressText> 
    </UI>
    
    <!-- Use DISM to setup IIS (see also http://support.microsoft.com/kb/2736284) -->
    <!-- Build path to dism.exe (full path is important, just calling dism.exe without path will fail) -->
    <CustomAction Id="InstallIISSetProperty" Property="InstallIIS" Execute="immediate"
                      Value="&quot;[System64Folder]dism.exe&quot; /Online /Enable-Feature /All /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-ManagementConsole " />
    <!-- Call dism.exe quietly (without showing command prompt).
    (see also http://wixtoolset.org/documentation/manual/v3/customactions/qtexec.html) -->
    <CustomAction Id="InstallIIS" BinaryKey="WixCA" DllEntry="CAQuietExec64"
                    Execute="deferred" HideTarget="no" Return="ignore" Impersonate="no"/>
    
    <InstallExecuteSequence>         
      <Custom Action="InstallIISSetProperty" After="CostFinalize">
        <![CDATA[NOT Installed AND NOT IISMAJORVERSION]]>
      </Custom>
      <Custom Action="InstallIIS" Before="WriteRegistryValues">
        <![CDATA[NOT Installed AND NOT IISMAJORVERSION]]>
      </Custom>
    </InstallExecuteSequence>
    

    Reference Link

    【讨论】:

      【解决方案5】:

      这是一些用于快速修复的 WIX 代码

      run64.bat:我想知道为什么它需要这两行来欺骗文件系统重定向器

      set "SystemPath=%windir%\Sysnative"
      CD "%windir%\Sysnative""
      %*
      

      InstallIIS.wxs:将 run.bat 替换为特定于平台的批处理

        <?if $(var.Platform) = x86 ?> 
        <?define PlatformRunBatch = "run.bat" ?> 
        <?else?> 
        <?define PlatformRunBatch = "run64.bat" ?> 
        <?endif?> 
        <ExePackage Id="IIS_part0"
                    SourceFile="$(var.PlatformRunBatch)"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-26
        相关资源
        最近更新 更多