我可以允许用户选择applicationPoolIdentity或使用WiX-IIS扩展指定用户吗?

时间:2014-04-15 15:58:50

标签: wix wix-iisextension

我的Web应用程序通常会安装使用applicationPoolIdentity:

<iis:WebAppPool Id="MyAppPool" Identity="applicationPoolIdentity" Name="MyAppPool"/>

但我有一类用户想要使用特定的域用户,我通常会这样做:

<util:User Id="MyUser" Name="[MY_USER]" Domain="[MY_DOMAIN]" Password="[MY_PASSWORD]" CreateUser="no"/>
<iis:WebAppPool Id="MyAppPool" Identity="other" User="MyUser" Name="MyAppPool" />

为此设置用户界面非常简单,但有没有办法在Identity="applicationPoolIdentity"Identity="other"之间有条件地切换,而无需编写自定义操作?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的,但您需要创建一个包含两个具有条件的组件的组件组。由于这个解决方案有点冗长,我建议将其放在一个单独的文件中。

以下是基于https://www.codeproject.com/Articles/115036/Creating-WIX-Installer-for-ASP-NET-Web-Application的示例。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Fragment>
        <Property Id="IIS_WEBSITE" Value="root"/>
        <Property Id="VIRTUAL_DIR_VAL" Value="myappdir" />

        <!-- +++++++++++++++++++ web app name properties initialize ++++++++++++++++++++ -->
        <Property Id="WEB_APP_NAME" Value="myapp" />
        <Property Id="WEB_APP_USE_CUSTOM_APP_POOL_IDENTITY" Value="1" />

        <!-- +++++++++++++++++++ app pool identity properties initialize +++++++++++++++ -->
        <Property Id="WEB_APP_POOL_IDENTITY_DOMAIN" Value="domain" />
        <Property Id="WEB_APP_POOL_IDENTITY_NAME" Value="user" />
        <Property Id="WEB_APP_POOL_IDENTITY_PWD" Hidden="yes" />

        <!-- Reference to IIS Website to install to, but not create -->
        <iis:WebSite Id='rootwebsite'
                 Description='[IIS_WEBSITE]'
                 Directory='INSTALLFOLDER'>
          <!-- This element has to be here or WiX does not compile. It’s ignored 
               in this case. -->
          <iis:WebAddress Id="AllUnassignedHTTP" Port="80" />
          <iis:WebAddress Id="AllUnassignedHTTPS" Port="443" />
        </iis:WebSite>

        <DirectoryRef Id="INSTALLFOLDER">

          <Component Id="InstallWebsiteCustomUser" Guid="[guid]" KeyPath="yes" Win64="yes">
            <Condition><![CDATA[WEB_APP_USE_CUSTOM_APP_POOL_IDENTITY = 1]]></Condition>
            <util:User Id="WebAppPoolUser"
                       CreateUser="no"
                       Name="[WEB_APP_POOL_IDENTITY_NAME]"
                       Password="[WEB_APP_POOL_IDENTITY_PWD]"
                       Domain="[WEB_APP_POOL_IDENTITY_DOMAIN]" />
            <iis:WebAppPool Id="WebAppPoolCustom"
                            Name="[WEB_APP_NAME]"
                            Identity="other"
                            User="WebAppPoolUser"
                            ManagedPipelineMode="Integrated"
                            ManagedRuntimeVersion="v4.0"
                            RecycleMinutes="200" />
            <iis:WebVirtualDir Id="WebVirtualDirCustom"
                               Alias="[VIRTUAL_DIR_VAL]"
                               Directory="INSTALLFOLDER"
                               WebSite="rootwebsite">
              <!-- Turn the Virtual Directory into a web application. -->
              <iis:WebApplication Id="WebApplicationCustom"
                                  Name="[WEB_APP_NAME]"
                                  WebAppPool="WebAppPoolCustom" />
            </iis:WebVirtualDir>
          </Component>

          <Component Id="InstallWebsite" Guid="[guid]" KeyPath="yes" Win64="yes">
            <Condition><![CDATA[WEB_APP_USE_CUSTOM_APP_POOL_IDENTITY <> 1]]></Condition>
            <iis:WebAppPool Id="WebAppPool"
                            Name="[WEB_APP_NAME]"
                            Identity="applicationPoolIdentity"
                            ManagedPipelineMode="Integrated"
                            ManagedRuntimeVersion="v4.0"
                            RecycleMinutes="200"/>
            <iis:WebVirtualDir Id="WebVirtualDir"
                               Alias="[VIRTUAL_DIR_VAL]"
                               Directory="INSTALLFOLDER"
                               WebSite="rootwebsite">
              <!-- Turn the Virtual Directory into a web application. -->
              <iis:WebApplication Id="WebApplication"
                                  Name="[WEB_APP_NAME]"
                                  WebAppPool="WebAppPool" />
            </iis:WebVirtualDir>
          </Component>
        </DirectoryRef>

        <ComponentGroup Id="IisConfiguration">
          <ComponentRef Id="InstallWebsiteCustomUser" />
          <ComponentRef Id="InstallWebsite" />
        </ComponentGroup>
    </Fragment>
</Wix>