R16*_*60K 5 c# vb.net filesystems filesystemwatcher windows-shell
我正在开发一个“动态快捷方式”应用程序,它创建指向注册表项而不是实际文件/可执行文件的特殊快捷方式文件。注册表项包含所需文件的路径。我想要运行一个守护进程,它监视链接到的文件,并在移动或重命名它们时更新它们的注册表项。重命名后我可以使用 System.IO.FileSystemWatcher 进行处理,但是处理移动文件的最佳方法是什么?
我知道这超出了 FSW 的基本功能(尽管是低级文件系统操作)。问题是,最好的方法是什么?
我读过的大多数帖子/文章都提出了感觉完全“hacky”的方法,这些方法基本上涉及寻找删除,然后在文件的新位置创建,并通过文件大小、元数据、文件之间的时间连接两者。删除/创建触发器、哈希等。这很可能是我必须采用的方法,在所有驱动器上设置 FSW。不过,我希望可能有更好的方法。
是否可以:
2.1. 监听 shell 并“听到”移动操作?
2.2 或者(甚至更激进)替换或添加一些东西到 shell 移动操作中,触发某种事件或执行注册表更新任务本身,从而消除对守护程序的需要?
我有一种感觉,每个人都会告诉我 1. 是唯一的课程,但我期待您的建议。(首选 VB.NET 中的答案,但如果需要,可以从 C# 进行翻译)。
使用 C# 提供的高级无限制 api - 不,你不能。使用 FileSystemWatcher.. 在同一驱动器上移动文件的操作不是“删除和创建” - 它是“重命名”。
如果您可以/想要进入较低级别,那么您可以挂钩 IFileOperation shell 接口的 MoveItem 和 MoveItems,以及 Kernel32.dll 中的 MoveFile...它将适用于大多数应用程序,但需要扩展应用程序的安全权限,这在公司环境中大多是不可接受的。