WiX не правильно настроил сайт IIS

У меня есть установщик, который настраивает 2 веб-сайта, один из которых имеет некоторые приложения под корневым сайтом. Сайт верхнего уровня настроен только для проверки подлинности Windows, как показано ниже:

<iis:WebSite Id="WebSite"
             Description="Application"
             Directory="WEBSITE_INSTALLLOCATION"
             AutoStart="yes"
             ConfigureIfExists="yes"
             StartOnInstall="yes">

        <iis:WebAddress Id="AllUnassigned" Port="80" />

        <iis:WebApplication Id="WebApplication"
                            Name="Console"
                            WebAppPool="WebAppPool"/>

        <iis:WebDirProperties Id="WebProperties"
                              AnonymousAccess="no"
                              WindowsAuthentication="yes"
                              AuthenticationProviders="NTLM,Negotiate"/>

</iis:WebSite>

Другие (дополнительные) компоненты в программе установки затем объявляют приложения/виртуальные каталоги следующим образом:

<iis:WebVirtualDir Id="HelpWebSite" Alias="Help" Directory="ApexHelpDir" WebSite="WebSite">
    <iis:WebApplication Id="HelpApp" Name="Help" WebAppPool="WebAppPool"/>
    <iis:WebDirProperties Id="HelpProps" AnonymousAccess="yes" WindowsAuthentication="no"/>
</iis:WebVirtualDir>

Поведение, которое я вижу, - это то, что я ожидал бы 9/10 раз, но с перерывами установщик установит сайт "Веб-сайт" с аутентификацией с помощью анонимной аутентификации и, а не только с помощью Приложение справки с анонимной аутентификацией. Единственное объяснение этого, о котором я могу думать, состоит в том, что действие добавления виртуального каталога/приложения под корневым сайтом иногда заставляет root наследовать параметры проверки подлинности ребенка, а также свои собственные.

Примечание. Я попытался поднять это как ошибку на сайте wixtoolset.org, но при попытке сделать это все время получал ошибку.

Ответ 1

В качестве альтернативы вы можете написать пакет script для создания веб-сайта и вызова из WIX в качестве пользовательского действия.

Пакетный файл

%systemroot%\system32\inetsrv\appcmd.exe add site /name:YourWebSite /PhysicalPath:%systemdrive%\inetpub\wwwroot /bindings:http/*:80:

WIX (product.wxs)

<CustomAction Id="CreateWebsite" Execute="deferred" Impersonate="no" Return="check" Directory="TARGETDIR" PatchUninstall="no" ExeCommand="Batchfilepath" />

<InstallExecuteSequence>
<Custom Action="CreateWebsite" Before="InstallFinalize">NOT Installed AND NOT PATCH</Custom>
</InstallExecuteSequence>

Измените значение атрибута ExeCommand, чтобы указать правильный путь пакетного файла.

Ответ 2

Обходной путь для меня состоял в том, чтобы отключить анонимную аутентификацию на уровне сервера.

Похоже, что при возникновении этой хрупкости он наследует настройку с уровня сервера, хотя я не знаю, почему это происходит иногда.

Здесь Powershell script:

Set-WebConfigurationProperty -Filter "/system.webServer/security/authentication/anonymousAuthentication" -Name Enabled -Value False -PSPath IIS:\