我正在尝试弄清楚如何从以管理员身份运行的C#代码中执行管理员操作(重启IIS),但该用户不是“Administrator”帐户。
Process elevated = new Process();
elevated.StartInfo.Verb = "runas";
elevated.StartInfo.FileName = "Whatever.exe";
elevated.Start();
如果需要重启IIS(如之前所提到的),请使用iisreset命令。
希望您会觉得这个信息有用。
对于仍在寻找此功能的人,这是我使用的代码来帮助我完成此操作。
private static void DoIISReset()
{
Process iisReset = new Process();
iisReset.StartInfo.FileName = "iisreset.exe";
iisReset.StartInfo.RedirectStandardOutput = true;
iisReset.StartInfo.UseShellExecute = false;
iisReset.Start();
iisReset.WaitForExit();
}
(@"C:\Windows\System32\iisreset.exe")
。 - Mahmut K.System.Diagnostics.Process.Start(@"C:\Windows\System32\iisreset.exe");
这段代码可以帮助您,但是您可能会遇到“拒绝访问”的问题。
为了避免出现“拒绝访问”的情况,请按照以下步骤操作:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
更改为
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
IISReset
命令。详见:http://technet.microsoft.com/en-us/library/cc758159(WS.10).aspx
iisreset /noforce
ProcessStart
System.Diagnostics.Process.Start(@"C:\Windows\System32\iisreset.exe");
有两种方法可以做到这一点,但是对于两种方法,您都需要以管理员身份运行VS。
此代码将在空的cmd中提示一段时间,并将自动关闭窗口。
Process iisReset = new Process();
iisReset.StartInfo.FileName = "iisreset.exe";
iisReset.StartInfo.RedirectStandardOutput = true;
iisReset.StartInfo.UseShellExecute = false;
iisReset.Start();
iisReset.WaitForExit();
此代码还将重新启动IIS,并在CMD中提示几个处理过程。
Process.Start(@"C:\WINDOWS\system32\iisreset.exe", "/noforce");
这里有一个链接,介绍如何在PowerShell中完成此操作: http://www.computerperformance.co.uk/powershell/powershell_service_start.htm
另一种可能性是使用WMI: http://www.motobit.com/tips/detpg_vbs-wmi-restart-service/
这里还有另一种直接在#中实现的方法: http://www.csharp-examples.net/restart-windows-service/
希望这可以帮到你。