2014-06-26 27 views
5

Tôi đã dự án bằng IIS và tôi muốn tạo trình cài đặt cho nó bằng Wix. Tôi đã tạo trình cài đặt .msi cho ứng dụng thành công và tôi đang tạo trình cài đặt Bundle cho ứng dụng, trình cài đặt này sẽ cài đặt các điều kiện tiên quyết và sau đó là ứng dụng của tôi.Wix & Burn - Cài đặt IIS nếu chưa cài đặt

Đây là mã của 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> 

Câu hỏi của tôi là, làm thế nào tôi có thể cài đặt (? Hoặc bật) IIS, NẾU không được cài đặt?

Cảm ơn!

Trả lời

3

@Nagy Vilmos, giải pháp của bạn sẽ không hoạt động trên hệ điều hành 64-bit. Ghi là 32-bit chương trình. Nó sẽ khởi động 32-bit "dism.exe", ngay cả khi bạn muốn nó chạy 64-bit dism bằng cách cho đường dẫn đầy đủ "C: \ Windows \ System32 \ dism.exe" trên hệ điều hành 64-bit. Đó là do "File System Redirector".

Nhật ký bị ngắt sẽ cho bạn biết đó là 32 bit hoặc 64 bit. Mở tập tin "C: \ Windows \ Logs \ DISM \ dism.log" bạn sẽ tìm thấy thông tin như thế này:

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

Hoặc,

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

Khi bạn cố gắng chạy 32-bit dism trên và 64-bit OS, bạn sẽ nhận được lỗi này

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

giải pháp của tôi là tạo ra một dự án trình cài đặt WiX "InstallPrerequisites" và chạy dism 64-bit với "QtExec64CmdLine". Dưới đây là ví dụ:

<!--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" /> 

Tôi sử dụng tệp trả lời để bao gồm tất cả các tính năng, vì vậy, chúng tôi có thể bật tất cả các tính năng cùng một lúc. Và sau đó chuỗi trình cài đặt

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

Cập nhật: Bằng cách sử dụng "C: \ windows \ SysNative \ DISM.exe", tôi bây giờ có thể tránh một dự án riêng cho nền tảng x64. Từ nhật ký, bạn có thể thấy quy trình 32 bit hiện đang chạy DISM 64 bit.

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

Để làm cho nó hoạt động trên hệ điều hành 64-bit, chỉ cần gọi DISM là giải thích [ở đây] (http://stackoverflow.com/a/5936741/15186) để tránh chuyển hướng –

+0

@omatrot nó hoạt động, tôi đã cập nhật câu trả lời. – Rader

2

Thử Mã CustomAction sau: -

<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

tôi nên đặt mã CustomAction này ở đâu ? Bên trong thẻ Chuỗi? Hoặc là? –

+1

Điều này cần phải nằm trong thẻ Sản phẩm trong tệp Product.Wxs của bạn. –

+0

Đúng, nhưng tôi muốn đặt Trình cài đặt IIS vào gói ghi, không phải tệp .msi. (Gói My Burn chứa trình cài đặt của SQLExpress, .NET, IIS và trình cài đặt .msi của dự án của tôi). Nhưng nhờ tập tin dism.exe và các lệnh của nó, tôi nghĩ rằng tôi đã giải quyết được vấn đề với nó. –

13

Dựa trên Harbinder Singh 's answer, đây là giải pháp của tôi:

<?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> 

File run.bat là một tập tin văn bản đơn giản, chứa %*.

Giải pháp này chỉ hoạt động trên Windows 7, hoặc cao hơn, bởi vì các dism.exe không phải là một phần của Windows trước khi phiên bản 7.

+0

Không chắc chắn nếu có một cách tốt hơn, nhưng đối với tôi tôi đã phải thay thế 'dism.exe' với 'C: \ WINDOWS \ SYSNATIVE \ DISM.EXE' (xuất hiện để được sử dụng 32bit khi nó nên đã được sử dụng 64bit Có lẽ bootstrapper của tôi không chạy phiên bản chính xác? –

+0

Tôi nghĩ bạn có thể xem giải thích tại đây: https://stackoverflow.com/a/26422001/2891426 –

0

Dưới đây là một số mã WIX cho sửa chữa nhanh chóng

run64.dơi: Tôi tự hỏi tại sao nó đòi hỏi cả hai dòng để lừa File System Redirector

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

InstallIIS.wxs: thay thế cho nền tảng run.bat đợt cụ thể

<?if $(var.Platform) = x86 ?> 
    <?define PlatformRunBatch = "run.bat" ?> 
    <?else?> 
    <?define PlatformRunBatch = "run64.bat" ?> 
    <?endif?> 
    <ExePackage Id="IIS_part0" 
       SourceFile="$(var.PlatformRunBatch)" 
Các vấn đề liên quan