我希望通过具有帐户权限的服务器列表中的C#代码以编程方式执行iisreset。
对于本地计算机来说,这很容易做到,例如,这是一个示例代码:
// using ...
using System.Diagnostics;
public class YourForm : Form
{
// ...
private void yourButton_Click(object sender, EventArgs e)
{
Process.Start(@"C:\WINDOWS\system32\iisreset.exe", "/noforce");
}
// ...
}
另外:
using System.ServiceProcess;
using (ServiceController controller = new ServiceController())
{
controller.MachineName = “My local or remote computer name”;
controller.ServiceName = “IIS Service Name”; // i.e “w3svc”
if (controller.Status != ServiceControllerStatus.Running)
{
// Start the service
controller.Start();
Log.Debug(“IIS has been started successfully, now checking again for webservice availability”);
}
else
{
// Stop the service
controller.Stop();
// Start the service
controller.Start();
Log.Debug(“IIS has been restarted successfully”);
}
}
但如何为多个服务器执行此操作。
答案 0 :(得分:2)
您的第一个代码段应该完美地考虑到不需要提供iisreset命令的完整路径。
实际上,从CMD或Run工具调用IISRESET时,您不需要完整路径。所以,这是同一个电话。
关于用户权限,有两种方法
您可以将所需用户作为参数传递给Process.Start
Process.Start(" iisreset"," server1"," admin","管理员密码","域&# 34);
您可以像在代码中一样调用Process.Start,然后确保使用合适的用户运行您的应用程序
我在下面试过,它运作得很好
static void Main(string[] args)
{
string[] servers = LoadServersFromFile();
foreach (string server in servers)
{
Process.Start("iisreset", server.Trim());
}
}
private static string[] LoadServersFromFile()
{
//just listed all servers comma separated in a text file, change this to any other approach fits for your case
TextReader reader = new StreamReader("Servers.txt");
return reader.ReadToEnd().Split(',');
}
答案 1 :(得分:1)