How to set wix v3 iis webAppPool identity property?

时间:2017-08-03 07:11:52

标签: .net iis wix

Product.wsx

IISConfiguration

I want to put all posible values, from app pool identity, in wix dropdown. I can't assign the APP_POOL_IDENTITY to Identity property from iis:WebAppPool.

I want to remove constraint for these elements:

The iis:WebAppPool/@Identity attribute's value , '[APP_POOL_IDENTITY]', is not one of the legal options: 'networkService', 'localService', 'localSystem', 'other', or 'applicationPoolIdentity'.

1 个答案:

答案 0 :(得分:1)

这类似于Can I allow a user to choose either applicationPoolIdentity or specify a user using WiX-IIS extension?,但答案稍微复杂一些。

是的,这是可能的,但您需要创建一个组件组,其中每个可能的xml属性组合作为组件。每组组件都需要自己的ID,guid等。从用户界面填写的选项中,您将确定要安装的组件。由于这个解决方案有点冗长,我建议将其放在一个单独的文件中。

以下是两个需要不同属性的选项的示例,一个用于自定义应用程序池用户,另一个用于applicationPoolIdentity。使用" CustomUser"组件作为您需要的任何其他自定义选项的模板。注意,如果WiX XML发生变化,您只需要指定其他组件,而不仅仅是更改属性值。

基于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>