Skip to content

DeadLock SDK that allows developers to unlock files that cannot be removed on Windows

License

Notifications You must be signed in to change notification settings

CodeDead/deadlock-dotnet-sdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

deadlock-dotnet-sdk

GitHub release (latest by date) Nuget GitHub GitHub

deadlock-dotnet-sdk is a simple-to-use SDK for unlocking files in C# / dotnet on Windows based operating systems.

Usage

Add deadlock-dotnet-sdk to your solution tree using NuGet:

Install-Package deadlock-dotnet-sdk

You can initialize a new DeadLock helper object like so:

DeadLock deadLock = new DeadLock();

In addition, if you would like to rethrow inner exceptions, you can change the RethrowExceptions property when declaring a new DeadLock object:

DeadLock deadLock = new DeadLock(`true` | `false`);

You can also change the property dynamically:

deadlock.RethrowExceptions = `true` | `false`

Finding the processes that are locking a file

To find all the FileLocker objects that are locking a file, you can make use of the FindLockingProcesses method:

string path = @"C:\...\file.txt";
List<FileLocker> lockers = DeadLock.FindLockingProcesses(path);

You can also run the code asynchronously by calling the FindLockingProcessesAsync method`:

string path = @"C:\...\file.txt";
List<FileLocker> lockers = await DeadLock.FindLockingProcessesAsync(path);

To find the Process objects that are locking one or more files, you can invoke the FindLockingProcesses (or FindLockingProcessesAsync) method with multiple path parameters:

List<FileLocker> fileLockers = FindLockingProcesses("a", "c", "c");

Unlocking a file

To unlock a FileLocker, you can execute the Unlock method:

DeadLock.Unlock(locker);

You can also run the code asynchronously by running the UnlockAsync method:

await DeadLock.UnlockAsync(locker);

To unlock more than one FileLocker object, you can invoke the Unlock (or UnlockAsync) method with multiple FileLocker parameters:

Unlock(fileLockerA, fileLockerB, fileLockerC);

Alternatively, if you only want to unlock a file and you are not interested in using the FileLocker objects, you can do so by providing any of the Unlock or UnlockAsync methods with one or more string variables that represent the path or paths of the file(s) that should be unlocked:

// Unlock a single path
string path = @"C:\...\file.txt"; 
Unlock(path);

// Unlock multiple files
Unlock(path1, path2, path3);

// Asynchronously unlock one or more files
await UnlockAsync(path);
await UnlockAsync(path1, path2, path3);

FileLocker

The FileLocker object contains a List of System.Diagnostics.Process objects that are locking a file. You can retrieve the List of Process objects by retrieving the respective property:

List<Process> processes = fileLocker.Lockers;

To retrieve the path of the file that the Process objects are locking, you can make use of the Path property:

string path = fileLocker.Path;

Error handling

deadlock-dotnet-sdk has three specific Exception types that might occur when trying to find the Process objects that are locking a file.

  • RegisterResourceException
  • RmListException
  • StartSessionException

In case you want more detailed error messages, it is recommended that you call the Marshal.GetLastWin32Error method as soon as one of these Exception types occur:
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.getlastwin32error?view=net-6.0

RegisterResourceException

This error occurs when the system goes out of memory, when a specific time-out occurs or if an invalid handle is detected. You can find more information about this exception here:
https://docs.microsoft.com/en-us/windows/win32/api/restartmanager/nf-restartmanager-rmregisterresources#return-value

RmListException

This error occurs when the system goes out of memory, when a specific time-out occurs or if an invalid handle is detected. You can find more information about this exception here:
https://docs.microsoft.com/en-us/windows/win32/api/restartmanager/nf-restartmanager-rmgetlist#return-value

StartSessionException

This error occurs when the system goes out of memory, when a specific time-out occurs or if an invalid handle is detected. You can find more information about this exception here:
https://docs.microsoft.com/en-us/windows/win32/api/restartmanager/nf-restartmanager-rmstartsession#return-value

Credits

About

This library is maintained by CodeDead. You can find more about us using the following links:

Copyright © 2022 CodeDead