可能重复:
如何找出使用.NETlocking文件的过程?
我想复制一个文件,但它被另一个应用程序locking,所以引发FileInUseExceptionexception。 我想告诉用户哪个应用程序正在locking我试图复制的文件。 有没有在.NET框架的方式来做到这一点? 没有这方面的知识,我会诉诸用户使用Unlocker应用程序。
Windows 7将如何编程? .NET仍然是国王?
是否可以在远程Windows机器上创build性能计数器?
UWP的TitleBar后退button
鼠标hover事件上的Hightlight ListBox项目
你可以尝试在这个问题提供的代码在这里 ,或看看这里的其他建议 。
一般的方法是枚举所有进程的句柄,获取这些句柄的文件路径,并与您感兴趣的文件进行比较。
但这种方法的一个问题是,即使你可以确定文件被锁定,哪个应用程序有文件锁定,那么你仍然需要应付竞态条件,例如…
一毫秒后
该文件没有被锁定
没有锁的应用程序现在不是
然后两毫秒
该文件被锁定(再次)
一个不同的应用程序有锁
然后三毫秒
该文件仍然被锁定
另一个应用程序有锁
…等等
一个建议是尝试获取应用程序中的文件句柄,并在不能时捕获异常。
try { using (Stream stream = new FileStream("MyFilename.txt")) { } } catch { //check here why it Failed and ask user to retry if the file is in use. }
当然,这不会帮助确定罪魁祸首,但至少你有一个更安全的方法来尝试访问该文件。
请记住,Ed指出,在Vista以后,你可以使用Restart Manager API来完成这个任务(即使你的应用程序不是安装程序)。
您创建一个新的会话,注册感兴趣的文件,然后调用RmGetList来获取文件上具有句柄的应用程序或服务的列表。 如果应用程序能够识别重新启动管理器,而不涉及用户,则应该可以启动这些应用程序的重新启动。
显然,重新启动管理器是一个Win32 API,但你应该能够P / Invoke到它。 本文: http : //msdn.microsoft.com/en-us/magazine/cc163450.aspx具有所需的P / Invoke签名以及以这种方式使用的示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。