簡體   English   中英

文件被哪個進程鎖定?

[英]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

似乎有人已經弄清楚了這一點(而且您可能還會學法語:)

http://www.axcis.com.au/bb/viewtopic.php?p=505

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM