次のコードを使用して、wcf サービスもインストールする msi-setup 内に Windows 機能 (IIS など) をインストールしています。
<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でインストールされたWebサイドのリストを取得するためなど)。2 つ目のセットアップ プロジェクトを作成してそこにコードを配置しましたが、ダミー ファイルを含めた場合にのみコマンドが実行されます。
<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>
また、「インストール済みアプリケーション」リストに 2 番目の項目を追加したくありません。これの「通常の」位置はどこですか?Bootstrapper からコマンドを直接実行できますか? または、UI をロードして条件をチェックする前にカスタム アクションを実行できますか?
<Chain >
<PackageGroupRef Id="NetFx45Web"/>
<MsiPackage SourceFile="ServiceSetup.msi" EnableFeatureSelection="yes" DisplayInternalUI="yes" ForcePerMachine="yes"/>
</Chain>