<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Process API | The .NET Blog</title><link>https://thedotnetblog.com/fr/tags/process-api/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>fr</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Tue, 26 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/fr/tags/process-api/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET 11 règle enfin l'API Processus</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</guid><description>System.Diagnostics.Process reçoit sa plus grande mise à jour depuis des années. RunAndCaptureTextAsync, KillOnParentExit, API SafeProcessHandle et contrôle total sur la redirection des handles standard — plus de code répétitif de deadlock.</description><content:encoded>&lt;p&gt;Tout développeur .NET qui a eu besoin de lancer un processus et de capturer sa sortie a écrit une variation du même code boilerplate dangereux : lecture async de stdout, lecture async de stderr, &lt;code&gt;WaitForExitAsync&lt;/code&gt;, sans oublier de drainer les deux flux sinon vous aurez un deadlock. C&amp;rsquo;est un piège bien connu qui existe depuis des années.&lt;/p&gt;
&lt;p&gt;.NET 11 règle enfin cela correctement.&lt;/p&gt;
&lt;h2 id="runandcapturetextasync"&gt;RunAndCaptureTextAsync&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;ajout principal : une seule méthode statique qui démarre un processus, capture stdout et stderr, et attend la sortie sans deadlock.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAndCaptureTextAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dotnet&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;--version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StandardOutput&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Un seul appel. Pas de drainage manuel des flux. Pas de &lt;code&gt;WaitForExit&lt;/code&gt; soigneusement positionné. Si vous avez juste besoin d&amp;rsquo;exécuter quelque chose et d&amp;rsquo;obtenir sa sortie, c&amp;rsquo;est l&amp;rsquo;API qu&amp;rsquo;il vous faut.&lt;/p&gt;
&lt;p&gt;Il y a aussi &lt;code&gt;Process.RunAsync&lt;/code&gt; pour le cas où vous voulez attendre la sortie sans capturer le résultat.&lt;/p&gt;
&lt;h2 id="killonparentexit"&gt;KillOnParentExit&lt;/h2&gt;
&lt;p&gt;Un problème courant avec les processus lancés : si le parent plante ou est tué, les processus enfants continuent de tourner comme des orphelins. &lt;code&gt;KillOnParentExit&lt;/code&gt; vous permet de déclarer au démarrage du processus que le processus enfant doit se terminer quand le processus parent se termine.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est une fonctionnalité qui existait de manières spécifiques à chaque plateforme (job objects sur Windows, prctl sur Linux) mais nécessitait p/invoke ou des bibliothèques tierces pour être utilisée depuis .NET. Désormais, c&amp;rsquo;est une propriété de premier rang sur &lt;code&gt;ProcessStartInfo&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="apis-basées-sur-safeprocesshandle"&gt;APIs Basées sur SafeProcessHandle&lt;/h2&gt;
&lt;p&gt;La nouvelle surface d&amp;rsquo;API légère est construite autour de &lt;code&gt;SafeProcessHandle&lt;/code&gt; plutôt que de la classe &lt;code&gt;Process&lt;/code&gt; complète. La classe &lt;code&gt;Process&lt;/code&gt; complète contient beaucoup d&amp;rsquo;état et est difficile à éliminer — le chemin &lt;code&gt;SafeProcessHandle&lt;/code&gt; est plus adapté au trimmer pour les applications qui doivent minimiser la taille de sortie (WASM, AOT natif).&lt;/p&gt;
&lt;h2 id="contrôle-total-sur-lhéritage-des-handles"&gt;Contrôle Total sur l&amp;rsquo;Héritage des Handles&lt;/h2&gt;
&lt;p&gt;La mise à jour ajoute également un contrôle précis sur les handles qu&amp;rsquo;un processus enfant hérite et comment les handles standard sont redirigés. Auparavant, vous pouviez rediriger stdin/stdout/stderr mais ne pouviez pas spécifier exactement quels handles hériter au niveau du système d&amp;rsquo;exploitation. Les nouvelles APIs exposent ce contrôle.&lt;/p&gt;
&lt;h2 id="pourquoi-cest-important"&gt;Pourquoi C&amp;rsquo;est Important&lt;/h2&gt;
&lt;p&gt;La classe &lt;code&gt;Process&lt;/code&gt; est utilisée dans les outils, les systèmes de build, les exécuteurs de tests et toute application qui invoque d&amp;rsquo;autres exécutables. L&amp;rsquo;ancienne surface d&amp;rsquo;API datait de .NET Framework et montrait son âge. Ce n&amp;rsquo;est pas un changement cassant — les anciennes APIs fonctionnent toujours — mais le nouveau code devrait préférer la nouvelle surface.&lt;/p&gt;
&lt;p&gt;Pour les applications avec trimming ou les scénarios de compilation AOT, le chemin &lt;code&gt;SafeProcessHandle&lt;/code&gt; est particulièrement bienvenu. L&amp;rsquo;ancienne classe &lt;code&gt;Process&lt;/code&gt; amenait beaucoup de code lourd en réflexion qui compliquait le trimming.&lt;/p&gt;
&lt;p&gt;Post original : &lt;a href="https://devblogs.microsoft.com/dotnet/process-api-improvements-in-dotnet-11/"&gt;Process API Improvements in .NET 11&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>