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 | 155 | 5/1/2025 |