代码之家  ›  专栏  ›  技术社区  ›  erlando

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

  •  3
  • erlando  · 技术社区  · 14 年前

    我正在写一些代码允许用户远程管理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`
    

    但是,其他服务器管理任务使用

    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.config administration.config 仅对64位编辑器可见(例如。记事本.exe或者NotePad2.exe),我怀疑这就是我的代码无法修改的原因 管理.config 通过 Microsoft.Web.Management

    为什么 Microsoft.Web.Administration管理 applicationHost.config文件 在32位进程中,但是 Microsoft.Web.Management 只能读取/修改 如果在64位进程中运行?

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   erlando    14 年前

    经过一番挖掘,它看起来像是一只虫子:

    这个论坛帖子和卡洛斯·阿吉拉尔的一篇帖子解释了这一切:

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

    现在我明白了问题所在,是什么 卡西尼号是32位的 我们配置中的错误让我们尝试 (而不是system32)这是 我们找不到的原因 位处理减轻了这个问题 我们转到正确的文件夹。

    任何32位进程都会遇到这种路障。