我使用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
中运行答案 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"运行流程时动词,你不会得到错误。希望这会有所帮助。