2014-06-26 56 views
5

我有一个使用IIS的项目,我想用Wix为它创建一个安装程序。我已经成功创建了应用程序的.msi安装程序,并且为它创建了一个Bundle安装程序,它将安装必备软件,然后安装我的应用程序。Wix&Burn - 如果尚未安装,请安装IIS

这里是捆绑代码:

<?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,如果没有安装?

谢谢!

回答

3

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

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

Host machine information: OS Version=6.1.7600, Running architecture=x86

或者,

Host machine information: OS Version=6.1.7600, Running architecture=amd64

当您尝试DISM上运行32位和64位操作系统,您将收到此错误

Error: 11 You cannot service a running 64-bit operating system with a 32-bit version of DI SM. Please use the version of DISM that corresponds to your computer's architecture. The DISM log file can be found at 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 -----> 
+4

要使它在64位操作系统上工作,只需将DISM作为解释[这里](http://stackoverflow.com/a/5936741/15186)以避免重定向。 –

+0

@omatrot它的工作原理,我已经更新了答案。谢谢! – Rader

2

请尝试以下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> 
+0

我应该在哪里把这个CustomAction代码?链标签内?要么? –

+1

这需要在Product.Wxs文件中的产品标签下。 –

+0

是的,但我想将IIS安装程序放入刻录包,而不是.msi文件。 (My Burn软件包包含SQLExpress,.NET,IIS和我的项目的.msi安装程序的安装程序)。但是,感谢dism.exe文件及其命令,我想我解决了它的问题。 –

13

基于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不是以前版本的Windows的一部分7.

+0

不知道是否有更好的方法,但对我来说,我必须用'C:\ WINDOWS \ SYSNATIVE \ DISM.EXE'替换'dism.exe'(似乎在使用32位本应该使用64位?可能我的引导程序没有运行正确的版本? –

+0

我想你可以在这里看到解释:https://stackoverflow.com/a/26422001/2891426 –

0

这里是速战速决

run64一些WIX代码。蝙蝠:我不知道为什么它需要两条线来欺骗文件系统重定向

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