VB .NET FileSystemWatcher 不会在 rdp 连接上触发事件
VB .NET FileSystemWatcher does not fire event on rdp connection
大家好,我是这个论坛的新手,我是意大利人。首先,对于语言错误,我深表歉意;另外,由于国家时间不同,阅读回复应该会在很多小时后。
配置:VB .NET 2008 PRO 和 VB .NET 2008 EXpress
我的2台台式电脑:1个是WinXP SP3,1个是Win7 SP1
服务器:Windows 2008 R2 企业版
.NET 框架: 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 正确引发事件。
我已经看过以下 post(6 年前问):
FileSystemWatcher Fails to access network drive
但是是用C#写的,和我的情况不一样
在我看来,我认为可能的原因是:
- 在 PC 上,特定服务必须是 运行?例如,我尝试启动警报服务但没有任何变化
- 权限?但文件已被删除(DEL命令从服务器上的应用程序开始并正确到达PC)
- 通知从 PC 开始但不通过 RDP 连接?
- PC 上没有启动通知?我不知道如何调查这一点和上一点(我需要一个特定的程序来做这件事吗?)
如有任何建议,我们将不胜感激。
感谢大家
斯特凡诺
我已经通过这种方式解决了我的问题:
- 从项目中删除了 FSW
- 添加了 2 个自定义事件,第一个 (FileChangeEvent) 将在子表单中发生文件删除时从子表单中引发,并通过自定义事件参数将其传达给父表单; second (ChildUpdateList) 将由父级提出,以与所有活动的子级(同一表单的所有实例)通信,一个子级(不总是发生删除的相同)必须更新自己的列表视图中的文件列表。这是一个简单而好的解决方案,它还可以控制远程文件夹上的文件删除(FSW 不适用于这种情况)。
感谢所有给我评论的人,特别感谢 Colin Angus MacKay 博客 Passing Data Between Forms in which I have found a trace to solve and to Diego Cattaruzza (MVP) Visual-Basic.it(抱歉是意大利语)帮助我大大简化了 Colin 解决方案。
斯特凡诺
大家好,我是这个论坛的新手,我是意大利人。首先,对于语言错误,我深表歉意;另外,由于国家时间不同,阅读回复应该会在很多小时后。
配置:VB .NET 2008 PRO 和 VB .NET 2008 EXpress
我的2台台式电脑:1个是WinXP SP3,1个是Win7 SP1
服务器:Windows 2008 R2 企业版
.NET 框架: 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 正确引发事件。
我已经看过以下 post(6 年前问):
FileSystemWatcher Fails to access network drive
但是是用C#写的,和我的情况不一样
在我看来,我认为可能的原因是:
- 在 PC 上,特定服务必须是 运行?例如,我尝试启动警报服务但没有任何变化
- 权限?但文件已被删除(DEL命令从服务器上的应用程序开始并正确到达PC)
- 通知从 PC 开始但不通过 RDP 连接?
- PC 上没有启动通知?我不知道如何调查这一点和上一点(我需要一个特定的程序来做这件事吗?)
如有任何建议,我们将不胜感激。
感谢大家
斯特凡诺
我已经通过这种方式解决了我的问题: - 从项目中删除了 FSW - 添加了 2 个自定义事件,第一个 (FileChangeEvent) 将在子表单中发生文件删除时从子表单中引发,并通过自定义事件参数将其传达给父表单; second (ChildUpdateList) 将由父级提出,以与所有活动的子级(同一表单的所有实例)通信,一个子级(不总是发生删除的相同)必须更新自己的列表视图中的文件列表。这是一个简单而好的解决方案,它还可以控制远程文件夹上的文件删除(FSW 不适用于这种情况)。
感谢所有给我评论的人,特别感谢 Colin Angus MacKay 博客 Passing Data Between Forms in which I have found a trace to solve and to Diego Cattaruzza (MVP) Visual-Basic.it(抱歉是意大利语)帮助我大大简化了 Colin 解决方案。
斯特凡诺