[英]File locked by which process?
.NET中是否有辦法找出確切的進程已鎖定文件?
編輯 :我這樣做是因為我想讓我的用戶知道他們無法修改/打開文件,因為此刻,他們正在使用的另一個程序(例如Excel)將其打開。 希望這會有所幫助。
對此的簡短答案是“否”。
但是,總的來說,答案是可以使用多種API調用和WMI方法來查找此信息,但不要指望它是快速而簡單的。
如果要使用API調用,請查看帶有SYSTEM_PROCESS_INFORMATION參數的NtQuerySystemInformation函數。 這是帶有出色的免責聲明的可愛的“未記錄”方法之一:
NtQuerySystemInformation可能會更改或在Windows的未來版本中不可用。 應用程序應使用本主題中列出的備用功能。
所以我建議避免使用WMI。
您可以使用WMI Win32_Process類枚舉計算機上當前正在運行的所有進程,然后枚舉每個進程持有的所有句柄,直到找到您要查找的文件。 不幸的是,沒有簡單的方法“嘿,哪個進程正在鎖定此文件”,它只能以另一種方式起作用,您必須向下搜索進程列表,直到找到一個正在鎖定您感興趣的文件的進程為止。
我建議在CodeProject上寫一篇不錯的小文章,標題為:如何:(幾乎)通過C#第2部分:WMI中的WMI一切 。 (如果您喜歡這種東西,那么第1部分也是不錯的閱讀)
嗯...這不是完全采用.NET的方式...但是如果您只是想使用簡單的實用程序,請查看SysInternals中的Handle 。
似乎有人已經弄清楚了這一點(而且您可能還會學法語:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.