我有一些实用方法,使用Microsoft.Web.Administration.ServerManager
这些方法我一直遇到一些问题。出于说明目的,使用下面的死简单代码。
using(var mgr = new ServerManager())
{
foreach(var site in mgr.Sites)
{
Console.WriteLine(site.Name);
}
}
如果我将该代码直接放在控制台应用程序中并运行它,它将获取并列出 IIS express 网站。如果我从提升的命令提示符运行该应用程序,它将列出 IIS7 网站。有点不方便,但到目前为止还不错。
相反,如果我将该代码放在控制台应用程序引用和调用的类库中,它将始终列出 IIS Express 站点,即使控制台应用程序已提升。
谷歌让我尝试了以下方法,但没有成功。
//This returns IIS express
var mgr = new ServerManager();
//This returns IIS express
var mgr = ServerManager.OpenRemote(Environment.MachineName);
//This throws an exception
var mgr = new ServerManager(@"%windir%\system32\inetsrv\config\applicationhost.config");
显然,我误解了“提升”流程运行的方式。在提升的进程中执行的所有内容,甚至来自另一个 dll 的代码,不应该以提升的权限运行吗?显然不是?
谢谢您的帮助!