2010-09-17 68 views
3

我正在编写一些代码来允许用户远程管理IIS7。引擎盖下,这增加授权规则c:\windows\system32\inetsrv\config\administration.config在以下配置部分:为什么使用IIS7.5的Microsoft.Web.Management.dll仅适用于64位进程?

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)可见,我怀疑这就是为什么我的代码无法通过Microsoft.Web.Management

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

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

回答

2

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

本次论坛主题和卡洛斯·阿吉拉尔后解释了所有:

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

现在我明白了这个问题,是什么 发生的情况是,卡西尼是一个32位的 进程,并在我们的配置中的一个 错误的联合使我们尝试 加载“重定向”syswow (而不是system32)这是 之所以我们无法找到 administration.config。在64位运行 位进程缓解问题 因为没有“魔术”重定向 我们进入正确的文件夹。

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

相关问题