我的目标是设置一项服务来观看包含大约200个.exe文件的网络文件夹。我想要的是每次启动一个.exes时让服务更新日志。基本上我想通过每次使用其中一个应用程序来记录每个应用程序的使用情况。
我已尝试使用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
答案 0 :(得分:2)
看看这个Stack Overflow answer,它涉及监视WMI Win32_Process实例创建事件(基本上,当WMI注册已创建新进程时)。这可能是在C ++内核钩子之外找出进程何时开始的最有效方法。
此时,您只需要使用正则表达式来测试文件路径,看它是否来自该文件夹,如果是,则做出适当的响应。
答案 1 :(得分:1)
文件系统观察程序无法用于完成此操作,因为它不知道为什么正在访问该文件。可以访问它以显示可执行文件的属性或有人将其复制到本地硬盘驱动器。
如果您的目标是查看哪些计算机正在运行您的可执行文件,您可以使用Windows Management Instrumentation(WMI)远程查询计算机Win32_Process
并确定您的进程是否在那里运行。