我正在编写一些代码以允许用户远程管理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.config
和administration.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应用程序(或一些类似的东西),但不愿意。
答案 0 :(得分:2)
经过一番挖掘,看起来这是一个错误:
这个论坛帖子和Carlos Aguilar的帖子解释了所有:
http://forums.iis.net/p/1157779/1956471.aspx
现在我明白了这个问题,是什么 发生在卡西尼是一个32位 过程和那个结合起来 我们的配置中的错误让我们尝试 加载“重定向”syswow (而不是system32)是哪个 我们找不到的原因 administration.config。跑在64 位处理缓解了这个问题 因为没有“魔法”重定向 然后我们转到正确的文件夹。
任何32位进程都会遇到这个问题。