添加全局模块 <add>

概述

<globalModules> 集合的 <add> 元素指定要添加到 Web 服务器的单个全局模块。

兼容性

版本 说明
IIS 10.0 <add> 元素在 IIS 10.0 中未进行修改。
IIS 8.5 <add> 元素在 IIS 8.5 中未进行修改。
IIS 8.0 <add> 元素在 IIS 8.0 中未进行修改。
IIS 7.5 <add> 元素在 IIS 7.5 中未进行修改。
IIS 7.0 IIS 7.0 中引入了 <globalModules> 集合的 <add> 元素。
IIS 6.0 空值

安装

<globalModules> 元素包含在 IIS 7 的默认安装中。

操作方式

如何安装本机模块

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS) 管理器”
    • 如果使用的是 Windows 8 或 Windows 8.1:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
    • 如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:

      • 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS) 管理器”
    • 如果使用的是 Windows Vista 或 Windows 7:

      • 在任务栏上,单击“开始”,然后单击“控制面板”。
      • 双击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
  2. 在“连接”窗格中,单击要向其添加本机模块的服务器连接。

  3. 在服务器主页上,双击“模块”。
    Screenshot that shows the Modules is highlighted.

  4. 在“操作”窗格中,单击“配置本机模块...”

  5. 在“配置本机模块”对话框中,单击“注册...”
    Screenshot that shows the Configure Native Modules dialog box.

  6. 在“注册本机模块”对话框中的“名称”框中,键入本机模块的名称。

  7. 在“路径”框中,键入 .dll 文件所在位置的文件系统路径,或单击“浏览”按钮
    Screenshot that shows the Register Native Module dialog box.

  8. 在“配置本机模块”对话框中,选择刚刚注册的本机模块的选项,单击“确定”,然后再次单击“确定”。 这样,本机模块就可以运行了,并且可用于 Web 服务器上的站点和应用程序。

    注意

    如果不想启用本机模块运行,请清除本机模块的选项,然后单击“确定”。

  9. (可选)如果不希望在配置系统中较低级别重写本机模块,则可以锁定本机模块。 在“模块”页上,选择该模块,然后单击“操作”窗格中的“锁定”。

如何启用本机模块

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS) 管理器”
    • 如果使用的是 Windows 8 或 Windows 8.1:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
    • 如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:

      • 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS) 管理器”
    • 如果使用的是 Windows Vista 或 Windows 7:

      • 在任务栏上,单击“开始”,然后单击“控制面板”。
      • 双击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
  2. 导航到要管理的服务器、站点或应用程序级别。

  3. 在服务器、站点或应用程序主页上,双击“模块”。

  4. 在“操作”窗格中,单击“配置本机模块...”

  5. 在“配置本机模块”对话框中,选择要启用的本机模块的选项,然后单击“确定”。
    Screenshot that shows the Configure Native Modules dialog box. UriCacheModule is selected.

配置

<globalModules> 集合中的每个 <add> 元素都必须包含标识模块的 name 属性,以及指向实现模块的 DLL 的 image 属性。

特性

属性 说明
image 必需的字符串属性。

指定全局模块 .dll 文件的物理路径。 当使用环境变量(如 %windir%)时,属性值将展开。
name 必需的字符串属性。

指定全局模块的名称。
preCondition 可选的字符串属性。

指定全局模块将在哪些条件下运行。

preCondition 属性的值可以是下列其中一个或多个。 如果指定多个值,请使用逗号 (,) 分隔值。
说明
bitness32 当全局模块是 32 位 .dll 文件时,请指定 bitness32 值,并且 IIS 应仅为在 64 位操作系统上以 WOW64 模式(32 位模拟)运行的工作进程加载全局模块。
bitness64 当全局模块是 64 位 .dll 文件时,请指定 bitness64 值,并且 IIS 应仅为在 64 位模式下运行的工作进程加载全局模块。
integratedMode 当全局模块应使用集成的请求处理管道处理托管内容的请求时,请指定 integratedMode 值。
ISAPIMode 当全局模块应使用 ASP.NET ISAPI 扩展 Aspnet_isapi.dll 来处理托管内容请求时,请指定 ISAPIMode 值。
runtimeVersionv1.1 全局模块仅应为配置为使用 .NET Framework 版本 1.1 的应用程序池加载时,指定 runtimeVersionv1.1 值。
runtimeVersionv2.0 全局模块仅应为配置为使用 .NET Framework 版本 2.0 的应用程序池加载时,指定 runtimeVersionv2.0 值。

子元素

无。

配置示例

下面的示例演示了一个 IIS 7 <globalModules> 节,其中包含 Web 服务器最低安装中包含的所有模块的条目。 还包括 BasicAuthenticationModule 的条目,还有第三方模块 ImageCopyrightModule 的条目。

<globalModules>
   <add name="UriCacheModule"
      image="%windir%\System32\inetsrv\cachuri.dll" />
   <add name="FileCacheModule"
      image="%windir%\System32\inetsrv\cachfile.dll" />
   <add name="TokenCacheModule"
      image="%windir%\System32\inetsrv\cachtokn.dll" />
   <add name="HttpCacheModule"
      image="%windir%\System32\inetsrv\cachhttp.dll" />
   <add name="StaticCompressionModule"
      image="%windir%\System32\inetsrv\compstat.dll" />
   <add name="DefaultDocumentModule"
      image="%windir%\System32\inetsrv\defdoc.dll" />
   <add name="DirectoryListingModule"
      image="%windir%\System32\inetsrv\dirlist.dll" />
   <add name="ProtocolSupportModule"
      image="%windir%\System32\inetsrv\protsup.dll" />
   <add name="StaticFileModule"
      image="%windir%\System32\inetsrv\static.dll" />
   <add name="AnonymousAuthenticationModule"
      image="%windir%\System32\inetsrv\authanon.dll" />
   <add name="RequestFilteringModule"
      image="%windir%\System32\inetsrv\modrqflt.dll" />
   <add name="CustomErrorModule"
      image="%windir%\System32\inetsrv\custerr.dll" />
   <add name="HttpLoggingModule"
      image="%windir%\System32\inetsrv\loghttp.dll" />
   <add name="RequestMonitorModule"
      image="%windir%\System32\inetsrv\iisreqs.dll" />
   <add name="BasicAuthenticationModule"
      image="%windir%\System32\inetsrv\authbas.dll" />
   <add name="ImageCopyrightModule"
      image="%windir%\System32\inetsrv\ImageCopyrightModule.dll" />
</globalModules>

代码示例

以下示例在 IIS 7 上安装名为 ImageCopyrightModule 的本机模块,并在整个服务器上自动启用它。

AppCmd.exe

appcmd.exe install module /name:ImageCopyrightModule /image:%windir%\system32\inetsrv\imageCopyrightModule.dll

还可以使用以下语法:

appcmd.exe set config -section:system.webServer/globalModules /+"[name='ImageCopyrightModule',image='%windir%\system32\inetsrv\imageCopyrightModule.dll']" /commit:apphost

注意

使用 AppCmd.exe 配置这些设置时,必须确保将 commit 参数设置为 apphost。 这会将配置设置提交到 ApplicationHost.config 文件中的相应位置部分。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection globalModulesSection = config.GetSection("system.webServer/globalModules");
         ConfigurationElementCollection globalModulesCollection = globalModulesSection.GetCollection();
         ConfigurationElement addElement = globalModulesCollection.CreateElement("add");
         addElement["name"] = @"ImageCopyrightModule";
         addElement["image"] = @"%windir%\system32\inetsrv\imageCopyrightModule.dll";
         globalModulesCollection.Add(addElement);
         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim globalModulesSection As ConfigurationSection = config.GetSection("system.webServer/globalModules")
      Dim globalModulesCollection As ConfigurationElementCollection = globalModulesSection.GetCollection
      Dim addElement As ConfigurationElement = globalModulesCollection.CreateElement("add")
      addElement("name") = "ImageCopyrightModule"
      addElement("image") = "%windir%\system32\inetsrv\imageCopyrightModule.dll"
      globalModulesCollection.Add(addElement)
      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var globalModulesSection = adminManager.GetAdminSection("system.webServer/globalModules", "MACHINE/WEBROOT/APPHOST");
var globalModulesCollection = globalModulesSection.Collection;

var addElement = globalModulesCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "ImageCopyrightModule";
addElement.Properties.Item("image").Value = "%windir%\\system32\\inetsrv\\imageCopyrightModule.dll";
globalModulesCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set globalModulesSection = adminManager.GetAdminSection("system.webServer/globalModules", "MACHINE/WEBROOT/APPHOST")
Set globalModulesCollection = globalModulesSection.Collection

Set addElement = globalModulesCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "ImageCopyrightModule"
addElement.Properties.Item("image").Value = "%windir%\system32\inetsrv\imageCopyrightModule.dll"
globalModulesCollection.AddElement addElement

adminManager.CommitChanges()