我想将用户友好的文件锁定添加到以 C 编写的 Windows (主要是Windows 7)下运行的软件中。 我已经实现了文件锁定部分,通过保持文件正在使用"打开"在相应的过程中。我现在仍想补充的是识别当前打开/锁定文件的用户。
正在访问的文件位于映射的网络驱动器上,由不同计算机上的不同用户使用。 当一个文件被锁定而另一个人试图打开该文件时,他应该面对一个对话框,类似于"正在使用的文件"来自Microsoft Office程序的-dialog。在那里,还显示当前正在编辑文件的用户名。
我找到了解决方案,找出了某个文件打开的进程(使用了这个文件:How do I find out which process is locking a file using .NET?) 我还能够读出创建此过程的用户的名称。但是,当在网络驱动器上打开一个锁定文件时,这样做的用户名总是我自己的,而不是用户锁定文件的那个。
有谁知道如何实现这一目标?我的意思是Microsoft Office可以在具有相同用户权限的同一台PC上以某种方式执行此操作。我只是想知道......
干杯!
答案 0 :(得分:2)
Office使用一种非常简单的技术,我将以.NET术语来谈论它。每当Office应用程序使用FileShare.None打开文档文件时,它还会创建一个隐藏的"锁定文件"使用基于文档文件的名称(例如,使用" .lockfile"附加)。并将Environment.UserDomainName写入该文件。该文件是使用FileOptions.DeleteOnClose和FileShare.Read创建的,只要文档文件打开就会保持打开状态。
当文档再次关闭时,它会关闭锁定文件。使用FileOptions.DeleteOnClose可确保即使程序发生爆炸,锁文件也会消失。
当打开文件产生锁定违规时,它会查找锁定文件并读取用户名。轻松自在,简单易用。但当然只有当它是一个打开文件的特定应用程序时才能工作。