首页新闻找找看学习计划

c# 如何解除文件占用

0
悬赏园豆:10 [已解决问题] 解决于 2016-08-22 11:24

如题, 如何解除文件占用,哪位高人有经验,求指教!

类似360的功能,当判断一个文件被占用时,我需要强制解除占用,目前这个需求主要是用在程序升级时,主程序退出了,有些DLL却没有正常关闭或被其它的应用给占用了,导致更新失败

c#
梦在旅途的主页 梦在旅途 | 初学一级 | 园豆:10
提问于:2016-08-22 09:29
< >
分享
最佳答案
0

正常的做法还是先看程序有哪些地方没有关闭资源,然后正确关闭

实在找不到,那就kill进程

收获园豆:10
2012 | 专家六级 |园豆:19088 | 2016-08-22 09:57

关键点是我无法根据DLL找到所关联的进程,如果能找到就可以KILL进程实现,就像360清理垃圾时,若发出浏览器开启时,会弹出提示,是否关闭浏览器完成清理

不知道你是否有这方面的经验或指点一下,非常感谢!

梦在旅途 | 园豆:10 (初学一级) | 2016-08-22 10:25

@梦在旅途: 微软的开放下载的sysintenal中的procexp就可查看

https://technet.microsoft.com/en-us/sysinternals/bb842062 

2012 | 园豆:19088 (专家六级) | 2016-08-22 11:19

@2012: 谢谢,你的回答很有用,我也在网上找到了与你类似的答案,即可以使用:Handle ,通过handle "文件名" 能够查找出被引用的进程及进程EXE,这样就可以解决问题,谢谢!

梦在旅途 | 园豆:10 (初学一级) | 2016-08-22 11:23
其他回答(1)
0

说明程序退出的时候没有释放干净

你现在的想法是使用C#来释放文件,这种想法是不对的,因为实现不了

你需要在主程序中找到使用文件的代码的位置,然后在程序退出的时候释放这个文件,才是解决问题的方法

刘宏玺 | 园豆:14004 (专家六级) | 2016-08-22 09:52

其实退出时有作释放,但有些DLL可能因为其它原因或被其它程序共享,造成未能及时退出或延迟退出,造成升级无法覆盖,我现在就是想找到解除占用,或者说明KILL掉被占用的进程

支持(0) 反对(0) 梦在旅途 | 园豆:10 (初学一级) | 2016-08-22 10:23

@梦在旅途: 如果实在找不到,那就试试process.kill吧

支持(0) 反对(0) 刘宏玺 | 园豆:14004 (专家六级) | 2016-08-22 10:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册