繁体   English   中英

停止网站Microsoft.Web.Administration AccessDenied

[英]Stopping WebSite Microsoft.Web.Administration AccessDenied

我正在使用Microsoft.Web.Administration库来管理IIS中的WebSite。 我需要找到正确的WebSite,停止它,做一些事情然后重新启动它。

只要我使用管理员帐户,它就可以正常工作。 但是在实际情况下,我们需要使用本地帐户,该帐户可以响应有关我们软件的任务。 该帐户是本地管理员,可以使用IIS-Manager管理IIS。

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

因此,有没有办法授予本地帐户使用Microsoft.Web.Administration.ServerManager来管理站点的权限,还是只可能使用真正的Administrator-Account?

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

该代码在C#-Application内部运行

我是使用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”动词运行流程时,不会出错。 希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM