Skip to content

Releases: asmichi/ChildProcess

v0.18.0 release

22 Sep 08:23
Compare
Choose a tag to compare

Bugfixes

  • Fix potential dangling handles when handles supplied to ChildProcessStartInfo would be concurrently disposed by user code.
  • Fix undisposed handles (unnecessarily disposed by finalizers).

v0.17.0

30 Jun 04:15
Compare
Choose a tag to compare

Binary Breaking Changes

  • (Windows) Disposing IChildProcess (including the death of the current process) now kills (equivalent to calling TerminateProcess) the child process by default. This behavior can be disabled with ChildProcessFlags.DisableKillOnDispose.
    • This especially affects child processes created with ChildProcessFlags.AttachToCurrentConsole which previously would continue to run if the current process has a console.
    • Note, for a graceful shutdown, you should always perform WaitForExit on child processes.

Bugfixes

  • (Windows) ChildProcessFlags.AttachToCurrentConsole now correctly attaches child processes to the current console even when the current process is created with CREATE_NO_WINDOW (i.e. with an invisible console window).

v0.16.0

28 Apr 15:58
Compare
Choose a tag to compare

To mitigate the "BatBadBut vulnerability," this release introduces a significant breaking change that restricts execution of cmd.exe.

For details, refer to the description of ChildProcessStartingBlockedException. For background information, refer to the document on the "BatBadBut vulnerability": https://flatt.tech/research/posts/batbadbut-you-cant-securely-execute-commands-on-windows/

Binary Breaking Changes

  • (Windows) Executing cmd.exe now requires ChildProcessFlags.DisableArgumentQuoting.
  • (Windows) Batch files (*.bat/*.cmd) can no longer be executed.

v0.15.0

16 Mar 05:16
Compare
Choose a tag to compare

Bug Fixes

  • Fix an issue that causes a child process to be terminated on Windows <=1809 even when it is attached to the current console.
  • (Windows) Fix an issue that causes child processes to be killed at an unpredictable timing (i.e. on GC) after disposal of corresponding IChildProcess objects.
    • Due to job objects not being correctly closed.
    • If you dispose an IChildProcess object without first performing WaitForExit, and if the child process is attached to the current console (i.e. no pseudo console), the child process will not be killed on disposing the IChildProcess object.
    • Even if the child process is not attached to the current console (i.e. but to a pseudo console), the child process may be incorrectly given time to react CTRL_CLOSE_EVENT.

v0.14.0

03 May 09:09
Compare
Choose a tag to compare

Binary Breaking Changes

  • (Non-Windows) ChildProcessFlags.DisableArgumentQuoting now results in a PlatformNotSupportedException.

New Features

  • (Windows) Add the ability to obtain the process handle and the primary thread handle of the child process: ChildProcessFlags.EnableHandle, IChildProcess.Handle, IChildProcess.PrimaryThreadHandle
  • (Windows) Add the ability to create the child process with the CREATE_SUSPENDED flag

v0.13.0

19 Jun 04:14
Compare
Choose a tag to compare

Improvements

  • Improved stability.

v0.12.0

23 Feb 14:45
Compare
Choose a tag to compare

Improvements

  • (Windows) Now retries on ERROR_NOT_ENOUGH_MEMORY which intermittently occurs when child processes are created massively concurrently.

v0.11.0

14 Sep 11:42
Compare
Choose a tag to compare

Improvements

  • Use PROC_THREAD_ATTRIBUTE_JOB_LIST instead of CREATE_SUSPENDED so that forcible termination of the process will never leave its child processes suspended.

v0.10.0

31 Aug 16:30
Compare
Choose a tag to compare

Breaking Changes

  • Remove IChildProcess.IsSuccessful since it offers little functionality and is slightly vague.

Features

  • (Windows-specific) Disable the Windows Error Reporting dialog by default.

v0.9.0

28 Jul 14:28
Compare
Choose a tag to compare

Binary Breaking Changes

  • Change the type of ChildProcessStartInfo.Std*Handle to SafeHandle from SafeFileHandle.

Features

  • Add WaitForExit variants that take a TimeSpan.
  • Add IChildProcess.Id.