VB .NET FileSystemWatcher不会在rdp连接上触发事件

时间:2016-04-30 17:26:27

标签: vb.net filesystemwatcher rdp

所有人,我是这个论坛上的新手,我是意大利人。首先,我为语言错误感到抱歉;此外,由于国家时间不同,阅读回复应该是在很长时间之后。

配置:VB .NET 2008 PRO和VB .NET 2008 EXpress

我的2台台式电脑:1台是WinXP SP3,1台是Win7 SP1

服务器:Windows 2008 R2 Enterprise

.NET framework :3.5 SP1

我开发了一个在服务器2008上运行的WinForms应用程序;在应用程序中,我使用文件系统观察程序(FSW)组件来接收有关连接的PC上的文件夹的文件删除通知。通过远程桌面(RDP)进行连接。当用户使用该应用程序删除此文件夹上的文件时(应用程序执行此操作并且PC上的文件确实已删除)我需要FSW通知该事件。我在代码中没有任何错误,只是FSW不会触发事件,所以我没有收到来自PC的任何通知。 FSW代码(粘贴在下面)不会执行。 lvwDocFiles是一个ListView。

Private Sub fswFiles_Deleted(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles fswFiles.Deleted

    Try
        lvwDocFiles.Items.RemoveByKey(e.FullPath)
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub

FSW启动并在用户删除时运行。当用户删除本地文件夹(服务器上的文件夹)上的文件时,上面的代码会运行,所以在这种情况下FSW会正确地引发事件。

我已经看过以下帖子(6年前问过):

FileSystemWatcher Fails to access network drive

但是在C#中,与我的情况不同。

在我看来,我认为可能的原因是:

  1. 在PC上必须运行特定服务?例如,我试图启动警报服务但没有任何改变
  2. 权限?但该文件已被删除(DEL命令从服务器上的应用程序启动并正确到达PC)
  3. 通知是从PC开始但是没有通过RDP连接?
  4. 通知无法在PC上启动?我不知道如何调查这一点以及之前的观点(我需要一个特定的程序才能做到这一点?)
  5. 任何建议都将受到高度赞赏。

    感谢所有人 斯特凡诺

1 个答案:

答案 0 :(得分:1)

我用这种方式解决了我的问题: - 从项目中删除了FSW - 添加了2个自定义事件,当子文件中发生文件删除时,将从子窗体中引发第一个(FileChangeEvent),并通过自定义事件标记将其传递给父窗体;父进程将引发第二个(ChildUpdateList)与所有活动子进程(同一表单的所有实例)进行通信,即一个子进程(并不总是与发生删除相同)必须更新自己列表视图中的文件列表。这是一个简单而好的解决方案,它还控制远程文件夹上的文件删除(FSW在这种情况下不起作用)。

感谢所有这些给了我评论并特别感谢Colin Angus MacKay博客Passing Data Between Forms,其中我找到了解决的痕迹和Diego Cattaruzza(MVP)Visual-Basic.it(对不起,这是意大利语)这有助于我大大简化Colin解决方案。

斯特凡诺