예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
 private static void MainForm_Unlock(LockedFileInfo lockedFileInfo)
 {
     _handleUnlocker.UnlockFile(lockedFileInfo);
 }