0

我有以下非常简单的脚本

Imports System.Management
Imports System

Module Module1
Dim watcher As ManagementEventWatcher

Sub Main()

    Dim monitoredProcess = "iexplore.exe"
    Dim query As WqlEventQuery = New WqlEventQuery("__InstanceCreationEvent", New TimeSpan(0, 0, 1), "TargetInstance isa ""Win32_Process"" And TargetInstance.Name = """ & monitoredProcess & """")

    watcher = New ManagementEventWatcher()
    watcher.Query = query
    watcher.Start()

    watcher.WaitForNextEvent()

    For Each p As Process In Process.GetProcessesByName("iexplore")
        p.Kill()
    Next

    Process.Start(New System.Diagnostics.ProcessStartInfo("Chrome", "http://google.com"))

End Sub

End Module

哪个应该监视 ie 窗口何时打开,关闭它并运行 chrome。这第一次很好用,但是一旦完成它就会崩溃并出现以下错误

An unhandled exception of type     'System.Runtime.InteropServices.InvalidComObjectException' occurred in System.Management.dll

Additional information: COM object that has been separated from its underlying RCW cannot be used.

我能做些什么来阻止 com 分离?我希望程序以 windows 启动并一直运行。

谢谢

4

1 回答 1

0

我修复了这个基本上是创建一个循环

Imports System.Management
Imports System

Module Module1
Dim watcher As ManagementEventWatcher

Sub Main()

    Dim monitoredProcess = "iexplore.exe"
    Dim query As WqlEventQuery = New WqlEventQuery("__InstanceCreationEvent", New TimeSpan(0, 0, 1), "TargetInstance isa ""Win32_Process"" And TargetInstance.Name = """ & monitoredProcess & """")

    watcher = New ManagementEventWatcher()
    watcher.Query = query
    watcher.Start()

    watcher.WaitForNextEvent()

    For Each p As Process In Process.GetProcessesByName("iexplore")
        p.Kill()
    Next

    Process.Start(New System.Diagnostics.ProcessStartInfo("Chrome", "http://google.com"))

    watcher.Stop()
    watcher.Dispose()

    Main()

End Sub

End Module
于 2016-06-07T11:20:04.930 回答