Vb.net (已解决)Visual Basic-';GetObject';未申报

Vb.net (已解决)Visual Basic-';GetObject';未申报,vb.net,Vb.net,我在尝试将脚本从VBScript更新为标准VB时遇到了一个问题。该脚本只需检查Excel的任何正在运行的进程,然后确定它们运行了多长时间,如果时间超过4分钟,则将其关闭。 以下是脚本: Imports System Module Program Sub Main() Dim objWMIService As Object, objProcess, colProcess, startDate, timeDiff objWMIService = GetO

我在尝试将脚本从VBScript更新为标准VB时遇到了一个问题。该脚本只需检查Excel的任何正在运行的进程,然后确定它们运行了多长时间,如果时间超过4分钟,则将其关闭。 以下是脚本:

Imports System

Module Program
    Sub Main()

        Dim objWMIService As Object, objProcess, colProcess, startDate, timeDiff

        objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
        colProcess = objWMIService.ExecQuery("Select * from Win32_Process Where Name = " & "'EXCEL.EXE'")

        For Each objProcess In colProcess
            startDate = WMIDateStringToDate(objProcess.creationdate)
            timeDiff = DateDiff("n", startDate, Now)
            If timeDiff > 4 Then
                objProcess.Terminate()
            End If
        Next
    End Sub

    Function WMIDateStringToDate(dtmInstallDate As String) As Date

        WMIDateStringToDate = CDate(
                Mid(dtmInstallDate, 5, 2) & "/" &
                Mid(dtmInstallDate, 7, 2) & "/" &
                Left(dtmInstallDate, 4) & " " &
                Mid(dtmInstallDate, 9, 2) & ":" &
                Mid(dtmInstallDate, 11, 2) & ":" &
                Mid(dtmInstallDate, 13, 2))

    End Function

End Module
总的来说,脚本应该可以工作。然而,有一件事不想工作——调用GetObject。我在VisualStudio中编码,它给了我错误BC30451('GetObject'未声明)。我理解错误的含义,但我的问题是,为什么GetObject不存在?它不是Visual Basic的内置函数吗

我尝试将GetObject切换为CreateObject,但我觉得将其更改为CreateObject无助于解决问题。另外,我在创建ActiveX组件时遇到了“无法创建ActiveX组件”错误,因此这是另一个死胡同

我是不是错过了一些参考图书馆之类的东西?我的语法有点错误吗?我试图阅读文档,但除了使用GetObject之前的Set语句之外,文档和代码之间似乎没有什么不同。但是VisualStudio告诉我Let和Set已经过时了


感谢所有能帮我解决这个问题的人

在评论中做了大量的贡献,并对文档进行了更多的搜索之后,我终于找到了一个解决方案。程序完全按照预期工作。我将在下面发布代码,以防其他人需要它:

Imports System
Imports System.Management

Module Program
    Sub Main()

        Dim objWMIService As New ManagementObjectSearcher(
                        "root\CIMV2",
                        "SELECT * FROM Win32_Process WHERE Name = " & "'EXCEL.EXE'"), startDate, timeDiff

        For Each queryObj As ManagementObject In objWMIService.Get()
            Dim inParams As ManagementBaseObject =
                    queryObj.GetMethodParameters("Terminate")

            startDate = WMIDateStringToDate(queryObj("CreationDate"))
            timeDiff = DateDiff("n", startDate, Now)
            If timeDiff > 4 Then
                queryObj.InvokeMethod("Terminate", inParams, Nothing)
            End If
        Next
    End Sub

    Function WMIDateStringToDate(dtmInstallDate As String) As Date

        WMIDateStringToDate = CDate(
                    Mid(dtmInstallDate, 5, 2) & "/" &
                    Mid(dtmInstallDate, 7, 2) & "/" &
                    Left(dtmInstallDate, 4) & " " &
                    Mid(dtmInstallDate, 9, 2) & ":" &
                    Mid(dtmInstallDate, 11, 2) & ":" &
                    Mid(dtmInstallDate, 13, 2))

    End Function

End Module

请参阅示例,使用
System.Management
。顺便说一句,要转换日期,可以使用该类。使用,它会自动写入所需的vb.net代码。使用Hans建议的WMI代码创建者实用程序,我已经开始让事情再次进展。谢谢你的建议。我现在遇到另一个问题,我要导入的名称空间(systems.management等)遇到BC40056错误(无法找到导入中指定的名称空间或类型)。如果这些导入无法正常工作,则无法定义我需要的某些变量类型。我在谷歌上四处寻找发生了什么。有什么建议吗?您是否引用了在其中声明这些类型的程序集?如果引用的程序集中没有包含成员类型声明的程序集,则无法导入命名空间。如果不访问至少一个作为特定命名空间成员的类型,则该命名空间不存在。代码是否编译?听起来您可能创建了一个.net核心控制台项目-您想创建一个控制台应用程序(.net Framework)。如果createobject正在编译,并且创建对象失败?那就不同了。您所拥有的看起来很好,至少就能够编译而言。