ProcThreadAttributeJobListDotNet 1.0.0
dotnet add package ProcThreadAttributeJobListDotNet --version 1.0.0
NuGet\Install-Package ProcThreadAttributeJobListDotNet -Version 1.0.0
<PackageReference Include="ProcThreadAttributeJobListDotNet" Version="1.0.0" />
<PackageVersion Include="ProcThreadAttributeJobListDotNet" Version="1.0.0" />
<PackageReference Include="ProcThreadAttributeJobListDotNet" />
paket add ProcThreadAttributeJobListDotNet --version 1.0.0
#r "nuget: ProcThreadAttributeJobListDotNet, 1.0.0"
#:package ProcThreadAttributeJobListDotNet@1.0.0
#addin nuget:?package=ProcThreadAttributeJobListDotNet&version=1.0.0
#tool nuget:?package=ProcThreadAttributeJobListDotNet&version=1.0.0
ProcThreadAttributeJobListDotNet
A managed wrapper around PROC_THREAD_ATTRIBUTE_JOB_LIST.
This class library only works on Windows 10 and newer, or Windows Server 2016 and newer. If you need a solution for Linux or macOS, there is a discussion here.
License
ProcThreadAttributeJobListDotNet is licensed under The MIT License.
Getting Started
Install the ProcThreadAttributeJobListDotNet package from NuGet.
Atomically Create Process In Job
var extendedLimitInformation = new JobObjectExtendedLimitInformation
{
BasicLimitInformation = { LimitFlags = JobObjectLimit.KillOnJobClose }
};
using var safeJobObjectHandle = extendedLimitInformation.CreateJobObject();
using var process = safeJobObjectHandle.CreateAssociatedProcess(
@"C:\Windows\System32\notepad.exe", @"C:\Windows\System32\drivers\etc\hosts");
// ...
Configure StartupInfo
CreateAssociatedProcess necessarily creates StartupInfoEx for its AttributeList. The contents of the concomitant
StartupInfo (except for cb) are irrelevant to creating an associated process, so you can use configureStartupInfo
to control the created process further:
var extendedLimitInformation = new JobObjectExtendedLimitInformation
{
BasicLimitInformation = { LimitFlags = JobObjectLimit.KillOnJobClose }
};
using var safeJobObjectHandle = extendedLimitInformation.CreateJobObject();
using var process = safeJobObjectHandle.CreateAssociatedProcess(
@"C:\Windows\System32\notepad.exe", configureStartupInfo: MyConfiguration);
// ...
void MyConfiguration(ref StartupInfo startupInfo)
{
startupInfo.Flags = StartupInfoFlags.UseShowWindow;
startupInfo.ShowWindowCommand = ShowWindowCommand.Maximize;
}
Acknowledgements
Raymond Chen for bringing PROC_THREAD_ATTRIBUTE_JOB_LIST to my attention in A more direct and mistake-free way of creating a process in a job object.
CsWin32 for generating several of the structures and enums required.
PInvoke.net for the rest.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- JetBrains.Annotations (>= 2024.3.0)
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.0 | 4,214 | 5/1/2025 |