c# - Wix - 在哪里安装 Windows 功能

标签 c# visual-studio wix wix3.8

我使用以下代码在我的 msi-setup 中安装 Windows 功能(如 IIS),该安装程序还安装了我的 wcf 服务。

<Property Id="INSTALLIISPROP" Value="C:\Windows\System32\dism.exe"></Property>
<CustomAction Id="InstallIISCA" Return="check" Property="INSTALLIISPROP" Execute="deferred" HideTarget="yes"  Impersonate="yes"
      ExeCommand="/online /enable-feature /featurename:IIS-WebServerRole /featurename:IIS-WebServerManagementTools /featurename:IIS-ManagementConsole" ></CustomAction>
<InstallExecuteSequence>
  <Custom Action="InstallIISCA" Before="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>

工作正常,只是我需要在服务安装期间安装 II(以在 UI 中获取已安装网站的列表等)。我创建了第二个安装项目并将代码放在那里,但它仅在我包含虚拟文件时才执行我的命令:

<Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
         <Component Id="ProductComponent" Guid="ff876420-51ed-4bfc-bfd0-167a6333bf5e">
     <File Id="Product.wxs" Source="Product.wxs" KeyPath="yes" Checksum="yes"/>
         </Component>
    </ComponentGroup>
</Fragment>

此外,我不希望“已安装的应用程序”列表中出现第二个项目。这个“正常”位置在哪里?我可以直接从 Bootstrapper 执行命令吗?或者我可以在加载 UI 并检查任何条件之前执行自定义操作吗?

<Chain >
    <PackageGroupRef Id="NetFx45Web"/>
    <MsiPackage SourceFile="ServiceSetup.msi" EnableFeatureSelection="yes" DisplayInternalUI="yes" ForcePerMachine="yes"/>
</Chain>

最佳答案

解决方案实际上非常简单。 Before="CostFinalize"安装“准备”对话框中的功能。

  <CustomAction Id="InstallIISCA" Return="ignore" Property="DISMPFAD" Execute="oncePerProcess" Impersonate="yes"
    ExeCommand="/online /enable-feature /all /featurename:IIS-WebServerRole /featurename:IIS-WebServer /featurename:IIS-CommonHttpFeatures /featurename:IIS-StaticContent /featurename:IIS-DefaultDocument /featurename:IIS-DirectoryBrowsing /featurename:IIS-HttpErrors /featurename:IIS-ApplicationDevelopment /featurename:IIS-ASPNET /featurename:IIS-ASPNET45 /featurename:IIS-NetFxExtensibility /featurename:IIS-NetFxExtensibility45 /featurename:IIS-ISAPIExtensions /featurename:IIS-ISAPIFilter /featurename:IIS-HealthAndDiagnostics /featurename:IIS-HttpLogging /featurename:IIS-LoggingLibraries /featurename:IIS-RequestMonitor /featurename:IIS-Security /featurename:IIS-RequestFiltering /featurename:IIS-HttpCompressionStatic /featurename:IIS-WebServerManagementTools /featurename:IIS-ManagementConsole /featurename:IIS-IPSecurity  /featurename:WAS-WindowsActivationService /featurename:WAS-ProcessModel /featurename:WAS-NetFxEnvironment /featurename:WAS-ConfigurationAPI /featurename:WCF-NonHTTP-Activation /featurename:WCF-Pipe-Activation45 /featurename:WCF-TCP-Activation45 /featurename:WCF-TCP-PortSharing45 /featurename:WCF-HTTP-Activation45" >
  </CustomAction>
  <InstallUISequence>
    <Custom Action="InstallIISCA" Before="CostFinalize" Overridable="yes">NOT Installed AND (VersionNT > 601)</Custom>
  </InstallUISequence >

关于c# - Wix - 在哪里安装 Windows 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19700674/

相关文章:

c# - Xamarin.窗体 : "InitializeComponent" and "Package restore failed" Build Errors

visual-studio - WindowsSDK_IncludePath在哪里定义?

wix - 将程序集安装到 GAC 时出现问题

c# - 为什么编译器对此代码的行为不同?

c++ - 使用 STL utility.h 重载运算符

wix - 托管 WiX Bootstrap 包

installation - 将外部文件复制到安装目录 WiX

c# - SpreadsheetLight 从单元格公式中获取数值

c# - 偶发的 TCP 连接失败 (WSAEHOSTUNREACH)

javascript - Ajax图片上传问题