Wix & Burn-установить IIS, если он еще не установлен
У меня есть проект, использующий IIS, и я хочу создать установщик для него с помощью Wix. Я создал его .установщик msi для приложения успешно завершен, и я создаю установщик пакета для него, который установит необходимые компоненты и после этого мое приложение.
Вот код пакета:
<?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="pathtoyour.msi" /> -->
</Chain>
</Bundle>
</Wix>
Мой вопрос в том, как я могу установить (или включить?) IIS, если он не установлен?
Спасибо!
4 ответа:
@Nagy Vilmos, ваше решение не будет работать на 64-битной ОС. Burn - это32-разрядная программа. Он запустит 32-битный " dism.exe", даже если вы хотите, чтобы он запускал 64-битный dism, давая полный путь "C:\Windows\System32\dism.exe " на 64-битной ОС. Это вызвано " Перенаправителем файловой системы ".
Журнал dism сообщит вам, что он 32-разрядный или 64-разрядный. Открыть файл "C:\Windows\Logs\DISM\dism.журнал " вы найдете такую информацию:Информация о хост-машине: ОС Version=6.1.7600, Running architecture=x86
Или,
Информация о хост-машине: OS Version=6.1.7600, Running architecture=amd64
При попытке запустить 32-разрядный dism на 64-разрядной ОС, вы получите эту ошибку
Ошибка: 11 Вы не можете обслуживать работающую 64-разрядную операционную систему с 32-разрядной версией DI СМ. Пожалуйста, используйте версию DISM, соответствующую архитектуре вашего компьютера. Файл журнала DISM можно найти по адресу C:\Windows\Logs\DISM\dism.log
Мое решение-создать еще один проект установщика WiX " InstallPrerequisites "и запустить 64-битный dism с" QtExec64CmdLine". Вот пример:
<!--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 ----->
Основываясь на ответеХарбиндера Сингха , Вот мое решение:
<?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.
Попробуйте следующий код 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>
Вот некоторый код 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)"