我正在编写一些代码来允许用户远程管理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.config
和administration.config
只对64个编辑器(如NOTEPAD.EXE或NotePad2.exe)可见,我怀疑这就是为什么我的代码无法通过Microsoft.Web.Management
为什么修改administration.config
Microsoft.Web.Administration
允许我在32位过程中读取/修改applicationHost.config
,但如果在64位过程中运行,Microsoft.Web.Management
只能读取/修改administration.config
?
我无法将我的项目重新编译为目标x64,因为存在对我们没有源代码的32位COM库的依赖。我可以构建一个工作,其中涉及调用一个进程外64位WCF应用程序(或一些类似的东西),但不愿意。