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),我怀疑这就是为什么我的代码无法通过Microsoft.Web.Management
修改administration.config
的原因。
为什么Microsoft.Web.Administration
允许我在32位进程中读取/修改applicationHost.config
,但只有在64位进程中运行时Microsoft.Web.Management
才能读取/修改administration.config
?
由于依赖于我们没有源代码的32位COM库,因此我无法重新编译我的项目以针对x64。我可以构建一个解决方案,其中涉及调用一个外部64位WCF应用程序(或类似的东西),但我宁愿不这样做。