deadlock-dotnet-sdk 1.0.1

dotnet add package deadlock-dotnet-sdk --version 1.0.1
NuGet\Install-Package deadlock-dotnet-sdk -Version 1.0.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="deadlock-dotnet-sdk" Version="1.0.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add deadlock-dotnet-sdk --version 1.0.1
#r "nuget: deadlock-dotnet-sdk, 1.0.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install deadlock-dotnet-sdk as a Cake Addin
#addin nuget:?package=deadlock-dotnet-sdk&version=1.0.1

// Install deadlock-dotnet-sdk as a Cake Tool
#tool nuget:?package=deadlock-dotnet-sdk&version=1.0.1

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

Product Compatible and additional computed target framework versions.
.NET net6.0-windows7.0 is compatible.  net7.0-windows was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0-windows7.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.1 534 4/20/2022
1.0.0 411 4/18/2022