监视文件夹时无法使用功能

时间:2018-04-12 10:14:29

标签: vbscript monitoring

我正在尝试监控特定文件夹,以便使用VBS创建文件。

这是文件夹的监视器创建功能,正如我在许多例子中看到的那样:

Function CreateMonitor(path)
    Set wmi = GetObject("winmgmts://./root/cimv2")
    Set fso = CreateObject("Scripting.FileSystemObject")

    path = Split(fso.GetAbsolutePathName(path), ":")
    drv  = path(0) & ":"
    dir  = Replace(path(1), "\", "\\")
    If Right(dir, 2) <> "\\" Then dir = dir & "\\"

    query = "SELECT * FROM __InstanceOperationEvent" & _
            " WITHIN " & Interval & _
            " WHERE Targetinstance ISA 'CIM_DataFile'" & _
            " AND TargetInstance.Drive='" & drv & "'" & _
            " AND TargetInstance.Path='" & dir & "'"

    Set CreateMonitor = wmi.ExecNotificationQuery(query)
End Function

然后我将它保存到以下var:

Set monitor = CreateMonitor(FolderPath)

最终我使用以下循环,它将无限运行(监视器),并在创建文件夹中的文件时创建一个实例:

Do
    Set evt = monitor.NextEvent()   

    Select Case evt.Path_.Class
        Case "__InstanceCreationEvent"
            Call SendNotification (evt.TargetInstance)
    End Select
Loop

成功监控流程创建后,我愿意继续使用已创建的文件,并将其发送到&#34; SendNotification&#34;功能

问题是函数的调用没有发生,我发现自己陷入了循环而没有进入这个函数。它等待直到创建文件,然后才继续进行。

我做错了什么?在这种情况下,什么是函数调用的正确方法?

1 个答案:

答案 0 :(得分:0)

  

返回值如果NextEvent方法成功,则返回包含所请求事件的SWbemObject对象。如果是电话   超时,返回的对象为NULL并引发错误。

     

错误代码完成NextEvent方法后,Err对象可能包含以下列表中的错误代码。

     

wbemErrTimedOut - 0x80043001请求的事件未在iTimeoutMs中指定的时间内到达

https://msdn.microsoft.com/en-us/library/aa393711(v=vs.85).aspx

说,我会按以下方式尝试If evt Is Nothing Then Exit Loop

Do
  Set evt = monitor.NextEvent()   

  If evt Is Nothing Then Exit Do

  Select Case evt.Path_.Class
         Case "__InstanceCreationEvent"
              call SendNotification (evt.TargetInstance)
  End Select
Loop

或者

On Error Resume Next

Do
  Set evt = monitor.NextEvent()   

  If Err <> 0 Then
      If Err.Number = wbemErrTimedout Then ' = &H80043001
         Exit Do

  Select Case evt.Path_.Class
         Case "__InstanceCreationEvent"
              call SendNotification (evt.TargetInstance)
  End Select
Loop