c# - 如何使用 ServerManager 从类库中读取 IIS 站点,而不是 IIS Express,或者提升的进程如何处理类库?

标签 c# iis-7 uac iis-express elevated-privileges

我有一些使用 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/

相关文章:

c# - 我怎么知道属性是否是通用集合

c# - 从 DbSet 中的集合中获取单个值并将此值与另一个 DbSet 进行比较

iis-7 - 为 IIS 7 编写远程控制脚本

c# - 页面没有显示,因为IIS上的请求实体太大

c++ - 从非提升的进程连接到提升的 COM 服务器

c# - 使用 wpf C# 获取 ListBox 中复选框的内容和 Items Collection

c# - 在下一个方法完成之前标签不会改变

c# - 在 IIS 7.5\C# (.NET v4.0) 中创建嵌套虚拟目录

c# - 在 C# 中处理 UAC 的正确方法

c# - WCF 模拟不是模拟管理员