一次重置多个服务器上的IIS而不是循环

时间:2009-02-24 22:11:54

标签: vb.net multithreading iis process

我试图在一组服务器上同时重置IIS而不是循环并重置每个服务器,但我似乎无法弄清楚如何做到这一点。有人可以举个例子吗?谢谢

我正在使用System.Diagnostics

            With m_Process.StartInfo
                .FileName = strFileName
                .Arguments = String.Format("{0}{1}", server, strArguements)
                .UseShellExecute = False
                .CreateNoWindow = True
                .RedirectStandardError = True
                .RedirectStandardOutput = True
            End With

3 个答案:

答案 0 :(得分:0)

我今天看到了几个类似条件的问题(“而不是循环”),我一直试图弄清楚循环的重要性。由于iisreset(我猜测的是你的例子中被分配给strFileName)只需要一个机器名称,你在那个部门就不走运了。

我认为iisreset连接到目标服务器上的SCM,并重新启动IIS Admin和相关服务。

我想你可以在命令行上滚动你自己的iisreset.exe,但是在内部,你必须使用某种迭代。

你能否解释为什么你不能或不想循环?

答案 1 :(得分:0)

在某种程度上,您必须遍历服务器列表并向每个服务器发送一些消息以指示它们重置。无论你是通过使用每个服务器名称运行iisreset还是通过其他方式来实现这一点,都无法让循环消失。

但是,如果您只是想要尽快开始重置所有服务器,而不是等到第一个完成重置之后再开始重置第二个服务器,那么看起来您已经拥有了。当你调用m_Process.Start()时,它应该在新的iisreset进程启动后立即返回。据我所知,它不会阻止并等到iisreset退出。因此,您的iisreset进程应该已经并行运行。

答案 2 :(得分:0)

如果我理解你在问什么,你可以在服务器上循环,但你只是不想等到每个服务器完成然后再进入下一个服务器。由于ProcessStartInfo不允许以任何方式从你正在启动的进程中分离(如果确实如此,那就很好),你可以这样做(显然,缺少你的参数等):

Imports System.Threading

Class Restarter

    Sub Main()

        Dim ServerList As New List(Of String)

        For Each server As String In ServerList
            ThreadPool.QueueUserWorkItem(AddressOf RestartServer, server)
        Next
    End Sub

    Sub RestartServer(ByVal Server As String)

        Dim m_Process As System.Diagnostics.Process

        With m_Process.StartInfo
            .FileName = strFileName
            .Arguments = String.Format("{0}{1}", Server, strArguements)
            .UseShellExecute = False
            .CreateNoWindow = True
            .RedirectStandardError = True
            .RedirectStandardOutput = True
        End With

        m_Process.Start()

    End Sub

End Class