我想使用 Microsoft.Web.Administration 命名空间中的类将自定义 CGI-Exe 的处理程序映射(脚本映射)添加到 Internet 信息服务器。(简化的)代码是:
var serverManager = ServerManager.OpenRemote(serverName);
Configuration webConfig = serverManager.GetWebConfiguration(siteName, appPath);
ConfigurationSection handlersSection = webConfig.GetSection("system.webServer/handlers");
ConfigurationElementCollection handlersCollection = handlersSection.GetCollection();
string elementName = cgiFile + " script map appHost added by ACM";
ConfigurationElement addElement = handlersCollection.CreateElement("add");
addElement["allowPathInfo"] = true;
addElement["modules"] = "CgiModule";
addElement["name"] = elementName;
addElement["path"] = cgiFile;
addElement["requireAccess"] = "Execute";
addElement["scriptProcessor"] = Path.Combine(scriptsPath, cgiFile);
addElement["verb"] = "*";
handlersCollection.Add(addElement);
serverManager.CommitChanges();
此代码将处理程序映射添加到 IIS 中的映射列表,但它被标记为禁用:
我必须从“操作”窗格中手动选择“编辑功能权限...”,然后在以下对话框中选择“执行”权限:
我想知道如何通过在创建处理程序时设置不同的配置选项或通过以编程方式编辑功能权限来启用处理程序映射。
更新
我复制了由该脚本创建的 web.config,然后使用上面的对话框手动添加了执行权限,并将生成的 web.config 与原始权限进行了比较:
起点从:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
到
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers accessPolicy="Read, Execute, Script">
现在我需要了解如何设置 accessPolicy。但是为什么这个设置在处理程序节点上而不是在我的特定处理程序节点上?