停止WebSite Microsoft.Web.Administration AccessDenied

时间:2018-04-05 08:03:24

标签: .net iis permissions administration

我使用Microsoft.Web.Administration库来管理IIS中的WebSite。 我需要找到正确的网站,停止它,做一些东西然后重新开始。

只要我使用管理员帐户,这样就可以了。但在实际情况中,我们需要使用本地帐户,该帐户对我们软件的任务负责。该帐户是本地管理员,可以使用IIS管理器管理IIS。

如果我将帐户访问权限C:\Windows\system32\inetsrv\config,则可以列出网站,但不能拨打.Stop()。如果我这样做,我们会收到E_ACCESSDENIED错误。

那么是否有办法授予本地帐户使用Microsoft.Web.Administration.ServerManager管理网站的权限,或者它是否可以用于真正的管理员帐户?

实施例

ServerManager serverManager = new ServerManager();
serverManager.Sites["MyWebSite"].Stop();

代码在C#-Application

中运行

1 个答案:

答案 0 :(得分:0)

我使用来自System.Diagnostics命名空间的c#进程,使用cmd并将其作为Admin运行。这是我的功能,它停止IIS应用程序池,你可以将其更改为停止网站:

void ManageIisApplicationPool(string scriptPath, string poolName, string action)
    {
        Process process = new Process();
        string cmdPathStop = $"{scriptPath}{poolName}_{action}.cmd";
        string stopCommand = "C:\\Windows\\System32\\inetsrv\\appcmd " +
                             $"{action} apppool /apppool.name:{poolName}";
        if (!File.Exists(cmdPathStop))
        {
            File.Create(cmdPathStop).Dispose();
            using (var tw = new StreamWriter(cmdPathStop))
            {
                tw.WriteLine(stopCommand);
                tw.Close();
            }
        }

        ProcessStartInfo startInfo = new ProcessStartInfo
        {
            FileName = cmdPathStop,
            WindowStyle = ProcessWindowStyle.Hidden,
            UseShellExecute = true,
            Verb = "runas"
        };
        process.StartInfo = startInfo;
        process.Start();

        process.WaitForExit();
    }

实际上代码有一些解决方法问题,它将cmd命令保存到.cmd文件然后运行它,如果你擅长cmd函数,你可以使用参数(将网站名称作为cmd函数参数传递)。唯一的问题是,当您使用" admin"运行流程时动词,你不会得到错误。希望这会有所帮助。