获取在网络驱动器上打开文件的用户的用户名-Microsoft Office Style
本文关键字:用户 -Microsoft Style Office 文件 网络 驱动器 获取 | 更新日期: 2023-09-27 18:22:33
我想将用户友好的文件锁定添加到运行在Windows(主要是Windows7)下的软件中,该软件是用C#编写的。通过在相应的过程中保持使用中的文件"打开",我已经实现了文件锁定部分。我现在仍然想添加的是识别当前打开/锁定文件的用户。
被访问的文件位于映射的网络驱动器上,由不同计算机上的不同用户使用。当一个文件被锁定,另一个人试图打开该文件时,他应该会看到一个对话框,类似于Microsoft Office程序中的"使用中的文件"对话框。在那里,还会显示当前正在编辑文件的用户的名称。
我找到了找出打开了某个文件的进程的解决方案(使用了这个:如何找出哪个进程正在使用.NET锁定文件?)我还可以从中读取创建该进程的用户的名称。然而,当在网络驱动器上打开锁定的文件时,通过这样做得到的用户名总是我自己的,而不是锁定文件的用户的用户名。
有人知道如何做到这一点吗?我的意思是,Microsoft Office也可以用同样的用户权限在我的同一台电脑上做到这一点。我只是想知道怎么。。。
干杯!
Office使用了一种非常简单的技术,我将用.NET术语来讨论它。每当Office应用程序使用FileShare.None打开文档文件时,它还会创建一个隐藏的"锁定文件",其名称基于文档文件(例如,附加".lockfile")。并将Environment.UserDomainName写入该文件。该文件是使用FileOptions.DeleteOnClose和FileShare.Read创建的,并且在文档文件打开时一直保持打开状态。
当文档再次关闭时,它会关闭锁定文件。使用FileOptions.DeleteOnClose可以确保锁定文件即使在程序爆炸时也会消失。
当打开文件产生锁定冲突时,它会查找锁定文件并读取用户名。简单,易于实现。但当然,只有当是一个特定的应用程序打开文件时,它才能工作。