我想杀死蒸汽.exe和一些额外的蒸汽过程,但我不知道该怎么做 VB.NET

I want to kill steam.exe and some extra steam process but I don't know how to do it in VB.NET

提问人:smsi 提问时间:4/23/2023 最后编辑:marc_ssmsi 更新时间:4/23/2023 访问量:65

问:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim steamkill() As String = {"steamwebhelper.exe", "steam.exe", "steamservice.exe"}
    Dim proc

    For a As Integer = 0 To steamkill.Length Step 1
         proc = Process.GetProcessesByName(steamkill.ElementAt(a))
         proc.Kill()

    Next

End Sub

我一直收到此错误:

System.MissingMemberException:找不到类型“Process()”上的“公共成员”Kill”。

我想在静音模式下进行。

我试图更改每个数组项,但没有奏效。我想杀死所有的蒸汽进程

vb.net for 循环 kill kill 进程 的数组

评论


答:

3赞 jmcilhinney 4/23/2023 #1

这个问题完美地展示了两件事。首先,您应该始终拥有.其次,您应该始终阅读文档。如果你做了第一个,那么这个问题将在编译时而不是运行时被捕获,如果你做了第二个,那么你就会知道问题是什么以及如何解决它。Option Strict On

正如文档明确指出的那样,该方法返回一个对象数组,而不是单个 .它甚至在名称中,即它告诉你它正在获得多个进程。正如错误消息明确告诉您的那样,数组没有方法。即使该数组中只有一个元素,您也需要获取这些元素,这些元素是对象,并调用每个元素。GetProcessesByNameProcessProcessKillProcessKill

首先,没有充分的理由在循环之外声明该变量。它仅在循环内部使用,因此请在循环中声明它,然后使用另一个循环来访问每个元素。在这种情况下,您应该使用循环。有意义的变量名称也会有所帮助:For Each

Dim processNames As String() = {"steamwebhelper.exe", "steam.exe", "steamservice.exe"}

For Each processName In processNames
    Dim processes As Process() = Process.GetProcessesByName(processName)

    For Each process In processes
        process.Kill()
    Next
Next

请注意,数组变量使用复数名称,而在其他地方使用单数名称。

正如我所说,为了帮助您避免将来出现此类情况,您应该转身并始终保留它,除非在需要后期绑定的特定情况下,这可能永远不会。在项目属性和 VS 选项中打开它,因此它将默认用于所有未来的项目。如果需要使用后期绑定,则仅在明确需要后期绑定的文件中将其转到文件级别。即便如此,您仍使用分部类将这些文件中的代码保持在绝对最低限度。Option Strict OnOnOnOnOff

这样一来,你就无法执行以下操作:

Dim proc

通过不为该变量指定数据类型,您可以允许它默认为 type ,这意味着您将无法获得对象实际类型成员的 Intellisense,并且您还可以尝试访问不存在的成员,就像您所做的那样,并让它在运行时爆炸,而不是编译器告诉您它没有意义。Object