如何使用VB.NET重新启动服务?

如何使用VB.NET重新启动服务?,vb.net,Vb.net,好的,我是VB.NET新手,正在尝试编写一个程序,提示用户输入服务器名称,然后在该计算机上重新启动IIS 问题1)未识别命名空间System.ServiceProcess。 问题2)需要代码方面的帮助,将servername传递到sub Imports System Imports System.ServiceProcess Imports System.IO Imports System.Threading Class RestartIIS Shared Sub Main()

好的,我是VB.NET新手,正在尝试编写一个程序,提示用户输入服务器名称,然后在该计算机上重新启动IIS

问题1)未识别命名空间
System.ServiceProcess

问题2)需要代码方面的帮助,将servername传递到sub

Imports System
Imports System.ServiceProcess
Imports System.IO
Imports System.Threading

Class RestartIIS
    Shared Sub Main()
        Run()
    End Sub

    Public Sub Run()
        Console.WriteLine("Please enter the Server Name: ")
        Dim ServerName As String = Console.ReadLine()

        Dim sc As ServiceController = New ServiceController("W3SVC")

        sc.Stop()
        Thread.Sleep(2000)
        sc.Start()

        Console.Write("Press Enter to Exit")
        Console.ReadLine()
    End Sub
End Class 

您应该通过右键单击项目并单击添加引用来添加对
System.ServiceProcess
程序集的引用。。。并将命令行参数传递给
Main
方法,如下所示:

Imports System
Imports System.ServiceProcess
Imports System.IO
Imports System.Threading

Class RestartIIS
    Shared Sub Main(ByVal commandLineArgs() as String)
        Run(commandLineArgs(0))
    End Sub

    Public Sub Run(ByVal machineName as String)
        Console.WriteLine("Please enter the Server Name: ")
        Dim ServerName As String = Console.ReadLine()

        Dim sc As ServiceController = New ServiceController("W3SVC", machineName)

        sc.Stop()
        Thread.Sleep(2000)
        sc.Start()

        Console.Write("Press Enter to Exit")
        Console.ReadLine()
    End Sub
End Class

这个问题似乎是一个练习,所以不发布完全工作的代码会更有帮助,IMHO.Mehrdad,当我尝试运行这个时,vs告诉我不能在共享方法中调用run。“如果没有类的显式实例,则无法从共享方法或共享成员初始值设定项中引用类的实例成员”@Tomalak:这更像是一个脚本管理类型的问题,而不是家庭作业。我不认为homeworks处理服务和这类东西。@judy:你应该让Run方法共享或使用对象实例来调用它。你可以使用
sc.WaitForStatus(ServiceControllerStatus.Stopped)
来代替
sc.WaitForStatus(ServiceControllerStatus.Stopped)
解释一下为什么这段代码回答这个问题会有帮助,不仅是问问题的人,而且是后来发现这个问题的人
ServiceControl.Stop()
Do
    ServiceControl.Refresh()
    If ServiceControl.Status = ServiceControllerStatus.Stopped Then
        ServiceControl.Start()
        Exit Do
    End If
Loop