public void UnlockFile(LockedFileInfo lockedFileInfo) { Debug.WriteLine("Unlocking handle..."); Status("Unlocking handle..."); // -c C3C -p 18600 -y var args = $"-c {lockedFileInfo.Handle} -p {lockedFileInfo.PID} -y -nobanner"; var outputString = RunProcessAndReadOutput(HandleExePath, args, Timeout); Debug.WriteLine(outputString); Status(outputString); }
public List <LockedFileInfo> QueryLockedFileInfo(string fileOrFolder) { var retVal = new List <LockedFileInfo>(); fileOrFolder = fileOrFolder.TrimEnd('\\'); Debug.WriteLine("Querying handle..."); Status("Querying handle..."); var outputString = RunProcessAndReadOutput(HandleExePath, $"\"{fileOrFolder}\" -nobanner", Timeout); Debug.WriteLine(outputString); Status(outputString); // WINWORD.EXE pid: 18600 type: File C3C: C:\Unlocker\UnlockerTest\test.docx var outputLines = outputString.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); if (outputLines.Length < 4) { return(retVal); } foreach (var outputLine in outputLines.Skip(3)) { var outputParts = outputLine.Split(new[] { "pid:", "type:", " ", ": " }, StringSplitOptions.RemoveEmptyEntries) .Select(o => o.Trim()).Where(o => o.Length > 0).ToArray(); if (outputParts.Length < 5) { retVal.Add(new LockedFileInfo { Status = outputLine }); continue; } var lockedFileInfo = new LockedFileInfo { Process = outputParts[0], PID = int.Parse(outputParts[1]), Type = outputParts[2], Handle = outputParts[3], File = outputParts[4], }; retVal.Add(lockedFileInfo); } return(retVal); }
private static void MainForm_Unlock(LockedFileInfo lockedFileInfo) { _handleUnlocker.UnlockFile(lockedFileInfo); }