我有一个安装程序,它配置了 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 次,但安装程序会间歇性地安装具有匿名身份验证和 Windows 身份验证的"网站"站点,而不仅仅是具有匿名身份验证的帮助应用程序。我能想到的唯一解释是,在根站点下添加虚拟目录/应用程序的行为偶尔会导致根继承子身份验证设置以及它自己的身份验证设置。
注意:我试图在 wixtoolset.org 网站上将其作为错误提出,但在尝试这样做时不断收到错误。
或者,您可以编写批处理脚本来创建网站并从WIX调用作为自定义操作。
批处理文件
%systemroot%system32inetsrvappcmd.exe add site /name:YourWebSite /PhysicalPath:%systemdrive%inetpubwwwroot /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 属性值以指向正确的批处理文件路径。
我的解决方法是在服务器级别禁用匿名身份验证。
似乎当这种不稳定发生时,它确实继承了服务器级别的设置,尽管我不知道为什么它只是偶尔发生。
下面是 Powershell 脚本:
Set-WebConfigurationProperty -Filter "/system.webServer/security/authentication/anonymousAuthentication" -Name enabled -value false -PSPath IIS:\