我正在写一些代码允许用户远程管理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应用程序(或类似的东西),但我更愿意不这样做。