3

我想使用 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 中的映射列表,但它被标记为禁用: 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。但是为什么这个设置在处理程序节点上而不是在我的特定处理程序节点上?

4

1 回答 1

3

有时它有助于在stackoverflow上制定问题。在玩了两天之后,我在发布问题几个小时后找到了解决方案:

我需要为处理程序设置 accessPolicy。

添加此行后,它终于起作用了:

handlersSection["accessPolicy"] = "Read, Script, Execute";

看来我只是使用了错误的搜索词,我寻找的是“编辑功能权限”而不是 accessPolicy。

于 2012-10-18T13:38:20.040 回答