我有一些使用 Microsoft.Web.Administration.ServerManager
的实用程序方法,但我一直遇到一些问题。使用以下死的简单代码进行说明。
using(var mgr = new ServerManager())
{
foreach(var site in mgr.Sites)
{
Console.WriteLine(site.Name);
}
}
如果我将该代码直接放在控制台应用程序中并运行它,它将获取并列出 IIS Express 网站。如果我从提升的命令提示符运行该应用程序,它将列出 IIS7 网站。有点不方便,但到目前为止一切顺利。
如果我将该代码放入控制台应用程序引用和调用的类库中,它将始终列出 IIS Express 站点,即使控制台应用程序已提升。
Google 让我尝试了以下方法,但没有成功。
//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 的代码,难道不应该以提升的权限运行吗?显然不是?
感谢您的帮助!
最佳答案
确保添加对正确 Microsoft.Web.Administration 的引用,应该是位于 c:\windows\system32\inetsrv\下的 v7.0.0.0 看起来您正在添加对 IIS Express 的 Microsoft.Web.Administraiton 的引用,这将为您提供该行为
关于c# - 如何使用 ServerManager 从类库中读取 IIS 站点,而不是 IIS Express,或者提升的进程如何处理类库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467908/