我可以使用什么软件来检测文件打开方式的详细信息(特别是其他进程的权限)?
我们有两个版本的卡片打印软件:CardFive 和 Zebra Card Studio,后者收购了 CardFive 并保留了其旧软件。
两者都会打开 CSV 文件以打印说明。旧版本允许软件的后续实例修改这些说明。新版本则不允许 - 它拒绝允许任何修改。
我怀疑问题出在文件锁定权限上,即旧软件以 OF_SHARE_DENY_NONE 打开(.NET 中的 ReadWrite文件共享枚举),并且新软件开放时会有更严格的共享限制。
我如何才能确切地知道网络文件是如何锁定的?我尝试在 Process Explorer 中查看两个应用程序版本的多个实例,但它只显示哪个进程打开了文件,而不是文件是如何打开的:
我知道并发写入访问可能会导致数据完整性问题。在这个特定情况下,我认为这不会成为问题。
答案1
Windows 上的文件锁定发生在两个级别。程序可以锁定整个文件(创建文件API)或其区域(锁定文件API)。Windows API(Win32)没有提供标准方法来查明文件是如何打开的。API查询对象可以提供一些关于文件如何打开的信息,但它不包括共享要求,并且它是一个可能随时更改的内部 API。
但是,应用程序可以通过尝试打开文件并检查打开是否因拒绝访问而失败来近似共享打开文件的语义。这样的程序会尝试打开文件 (1) 以 (1) 禁止访问,然后 (2) 读取访问,然后 (3) 写入访问。然后,应用程序可以通过尝试锁定文件的区域来检查文件是否有任何区域被锁定。
这种方法的问题在于它可能会干扰正在使用该文件的应用程序,并可能导致其失败。