自动化IIS配置指南

感谢CodeProject及其所有贡献者提供的优质文章,从这个网站上学到了很多,因此非常感激。这是第一次尝试发布一篇简短的文章,相信这将帮助开发者在需要以编程方式执行IIS设置时。

本文旨在帮助开发者使用安装程序类为网站设置认证和权限。这在开发者对部署过程没有或几乎没有控制权的情况下特别有用。

在某些情况下,开发者希望确保网站必须启用特定类型的认证,例如启用Windows身份验证并禁用其他所有认证。

有两个要求:

  1. 在IIS中启用Windows身份验证,并禁用所有其他认证。
  2. 网络、网络服务和Everyone应该对网站有完全控制权。

上述两个要求应该在不进行手动设置的情况下自动完成,即一旦部署设置完成,工程师就不应该手动更改设置,它们应该自动应用。

在继续之前,想提一下,参考了不同的网站和自己的逻辑来达到这个阶段,所以目前没有参考URL,但如果他们看到这篇文章,会感谢他们。

使用代码

请查看附加的zip文件,其中包含所有完整的示例代码、ReadMe.txt和文档,详细说明了在设置期间如何为虚拟目录设置权限,以及如何在设置期间设置所需的认证。

public override void Install(IDictionary stateSaver) { base.Install(stateSaver); stateSaver.Add("targetvdir", Context.Parameters["targetvdir"].ToString()); configureIIS(Context.Parameters["targetvdir"].ToString()); if (!EventLog.SourceExists("SampleApplication")) { EventSourceCreationData mySource = new EventSourceCreationData("SampleApplication", "SampleApplicationLogs"); EventLog.CreateEventSource(mySource); EventLog.WriteEntry("SampleApplication", "SampleApplication IIS Settings done."); EventLog.WriteEntry("SampleApplication", "targetvdir..." + Context.Parameters["targetvdir"].ToString()); } else { EventLog.WriteEntry("SampleApplication", "SampleApplication IIS Settings done."); EventLog.WriteEntry("SampleApplication", "targetvdir..." + Context.Parameters["targetvdir"].ToString()); } stateSaver.Add("targetdir", Context.Parameters["targetdir"].ToString()); DirectorySecurity dirSec = Directory.GetAccessControl(Context.Parameters["targetdir"].ToString()); FileSystemAccessRule fsar = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow); dirSec.AddAccessRule(fsar); FileSystemAccessRule fNet = new FileSystemAccessRule("NETWORK", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow); dirSec.AddAccessRule(fNet); FileSystemAccessRule fNetServ = new FileSystemAccessRule("NETWORK SERVICE", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow); dirSec.AddAccessRule(fNetServ); Directory.SetAccessControl(Context.Parameters["targetdir"].ToString(), dirSec); }

此方法更改特定Web应用程序名称的安全设置。

private void configureIIS(string vdName) { using (ServerManager serverManager = new ServerManager()) { Microsoft.Web.Administration.Configuration config = serverManager.GetApplicationHostConfiguration(); Microsoft.Web.Administration.ConfigurationSection anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Default Web Site/" + vdName); anonymousAuthenticationSection["enabled"] = false; Microsoft.Web.Administration.ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site/" + vdName); windowsAuthenticationSection["enabled"] = true; serverManager.CommitChanges(); } }

可以轻松识别ConfigureIIS方法确保设置了Windows身份验证属性,并将匿名设置为false。

创建部署包

为了创建部署包,开发者需要安装部署类型的项目。这可以从下载。

一旦安装了部署包,开发者可以添加部署类型的项目。

假设已经准备好了Web解决方案,可以添加部署类型的项目。

确保应用程序设置为发布模式,构建解决方案。

现在让添加安装程序类,可以通过添加类库然后添加安装程序类来完成。

删除默认类并添加安装程序类。

右键单击解决方案文件并添加Web设置项目。

右键单击Web设置 -> 添加 -> 项目输出。

出现弹出窗口,添加部署项目和安装程序类的主要输出。

点击确定。

右键单击Web设置项目并添加自定义操作。

右键单击自定义操作中的安装节点并添加。

点击属性或按F7键并添加以下自定义操作数据。

右键单击解决方案资源管理器中的解决方案文件并构建解决方案。

构建成功后,打开设置文件夹。

从设置项目的发布文件夹中运行安装程序。

Microsoft.Web.Administration.Configuration config = serverManager.GetApplicationHostConfiguration(); Microsoft.Web.Administration.ConfigurationSection anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Default Web Site/" + vdName); anonymousAuthenticationSection["enabled"] = false; Microsoft.Web.Administration.ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Default Web Site/" + vdName); windowsAuthenticationSection["enabled"] = true; serverManager.CommitChanges();
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485