为什么使用IIS7.5的Microsoft.Web.Management.dll只能在64位进程中工作?

时间:2010-09-17 13:07:00

标签: windows iis 64-bit iis-7.5

我正在编写一些代码以允许用户远程管理IIS7。在引擎盖下,这会在以下配置部分下将授权规则添加到c:\windows\system32\inetsrv\config\administration.config

  

system.webServer/management/authorization/authorizationRules

我正在使用Microsoft.Web.Administration程序集和命名空间,代码类似于以下代码:

using Microsoft.Web.Management.Server;
...
ManagementAuthorization.Grant("MySiteUser, "My Web Site", false);

如果在32位进程中运行,此代码将引发异常,如果构建为64位,则运行正常:

System.Runtime.InteropServices.COMException was unhandled
  Message=Filename: \\?\C:\Windows\system32\inetsrv\config\administration.config
Error: The configuration section 'system.webServer/management/authorization' cannot be read because it is missing a section declaration`

但是,使用Microsoft.Web.Administration程序集和命名空间执行的其他服务器管理任务在32位进程中工作正常,例如:

using Microsoft.Web.Administration;
....
int iisNumber = 60000;
using (ServerManager serverManager = new ServerManager())
{
  var site = serverManager.Sites.Where(s => s.Id == iisNumber).SingleOrDefault();
  if (site != null)
  {
    site.Stop();
  }
}

这些程序集都出现在GAC中并且是纯MSIL(即使有一个COM互操作层直接与IIS7的底层管理机制对话)。

底层配置文件applicationHost.configadministration.config仅对64位编辑器可见(例如notepad.exe或NotePad2.exe),我怀疑这就是我的代码无法修改的原因{{ 1}}通过administration.config

为什么Microsoft.Web.Management允许我在32位进程中读取/修改Microsoft.Web.Administration,但applicationHost.config只能在64位进程中运行时读取/修改Microsoft.Web.Management

我无法将我的项目重新编译为目标x64,因为我们没有源代码的32位COM库存在依赖性。我可以构建一个工作,包括调用一个进程外的64位WCF应用程序(或一些类似的东西),但不愿意。

1 个答案:

答案 0 :(得分:2)

经过一番挖掘,看起来这是一个错误:

这个论坛帖子和Carlos Aguilar的帖子解释了所有:

  

http://forums.iis.net/p/1157779/1956471.aspx

     

现在我明白了这个问题,是什么   发生在卡西尼是一个32位   过程和那个结合起来   我们的配置中的错误让我们尝试   加载“重定向”syswow   (而不是system32)是哪个   我们找不到的原因   administration.config。跑在64   位处理缓解了这个问题   因为没有“魔法”重定向   然后我们转到正确的文件夹。

任何32位进程都会遇到这个问题。

相关问题