2016-12-26 3 views
0

Я пытаюсь получить имя процесса, используя .mkv файл (vlc.exe, MPC-hc.exe и т.д.)Как я могу узнать, какой процесс файл используется

Мне уже удалось выяснить, используется ли он, но я хочу знать, какой именно процесс использует файл.

Я пробовал предложения из этого сообщения How do I find out which process is locking a file using .NET?, но просто подключаю путь к файлу, и его запуск не работает, он не показывает процессов (я могу запускать код без ошибок).

public static bool IsFileinUse(FileInfo file) 
{ 
    FileStream stream = null; 

    try 
    { 
     stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None); 
    } 
    catch (IOException) 
    { 
     //the file is unavailable because it is: 
     //still being written to 
     //or being processed by another thread 
     //or does not exist (has already been processed) 
     return true; 
    } 
    finally 
    { 
     if (stream != null) 
      stream.Close(); 
    } 
    return false; 
} 
+0

Это может помочь вам идти в правильном направлении http://stackoverflow.com/questions/958123/powershell-script-to-check-an-application- thats-locking-a-file –

+0

http://stackoverflow.com/questions/317071/how-do-i-find-out-which-process-is-locking-a-file-using-net –

+1

http: // stackoverflow.com/questions/860656/using-c-how-does-one-figure-out-what-process-locked-a-file –

ответ

-1

Попробуйте это:

string fileName = @"c:\yourFile.doc";//Path to locked file 

Process tool = new Process(); 
tool.StartInfo.FileName = "handle.exe"; 
tool.StartInfo.Arguments = fileName+" /accepteula"; 
tool.StartInfo.UseShellExecute = false; 
tool.StartInfo.RedirectStandardOutput = true; 
tool.Start();   
tool.WaitForExit(); 
string outputTool = tool.StandardOutput.ReadToEnd(); 

string matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)"; 
foreach(Match match in Regex.Matches(outputTool, matchPattern)) 
{ 
    Process.GetProcessById(int.Parse(match.Value)).Kill(); //kill the process if you want 
} 
+0

Что такое handle.exe? – john

+0

Handle - это утилита, которая отображает информацию об открытых ручках для любого процесса в системе. Вы можете использовать его для просмотра программ с открытым файлом или для просмотра типов объектов и имен всех дескрипторов программы. – NicoRiff

+0

Это часть инструментов sysinternals ... вы можете скачать его здесь: https://download.sysinternals.com/files/Handle.zip – NicoRiff

Смежные вопросы