监视可执行文件的使用



我的目标是建立一个服务来监视包含大约200个.exe文件的网络文件夹。我想要的是有服务更新日志每次一个。exe启动。基本上,我想记录每个应用程序的使用情况,记录每次使用它们中的一个。

我已经尝试使用FileSystemWatcher类来完成这一点,下面的代码,计算LastAccess过滤器会做的技巧,但它似乎不会。当我运行此代码时,打开应用程序时不会引发任何事件。

是否有一些方法使用FileSysteWatcher类来做这种监视?有什么办法能做到我想做的吗?

Private Sub StartWatch()
    Dim exeWatcher As New FileSystemWatcher
    exeWatcher.Path = "<path>"
    exeWatcher.Filter = "*.exe"
    exeWatcher.IncludeSubdirectories = True
    exeWatcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName Or NotifyFilters.Attributes)
    AddHandler exeWatcher.Changed, AddressOf ExeChanged
    exeWatcher.EnableRaisingEvents = True
End Sub
Private Sub ExeChanged(source As Object, e As FileSystemEventArgs)
    Console.WriteLine("File: " & e.FullPath & " " & DateTime.Now.ToString())
End Sub

看一下这个Stack Overflow答案,它涉及监视WMI Win32_Process实例创建事件(基本上,当WMI注册到一个新进程已经创建时)。这可能是在c++内核钩子之外发现进程何时启动的最有效的方法。

此时,您只需要使用正则表达式来测试文件路径,看看它是否来自该文件夹,如果是,则适当地响应。

文件系统监视程序不能用于完成此操作,因为它不知道为什么文件正在被访问。它可以被访问以显示可执行文件的属性,或者有人将其复制到本地硬盘驱动器。

如果您的目标是查看哪些机器正在运行您的可执行文件,您可以使用Windows Management Instrumentation (WMI)远程查询一台机器的Win32_Process,并确定您的进程是否在那里运行。

相关内容

  • 没有找到相关文章

最新更新