<?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/ja/tags/process-api/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ja</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/ja/tags/process-api/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET 11がついにプロセスAPIを修正</title><link>https://thedotnetblog.com/ja/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/ja/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</guid><description>System.Diagnostics.Process が年来最大のアップデートを受けます。RunAndCaptureTextAsync、KillOnParentExit、SafeProcessHandle API、標準ハンドルのリダイレクトを完全制御 — デッドロックの定型コードはもう不要。</description><content:encoded>&lt;p&gt;プロセスを起動して出力をキャプチャする必要があった .NET 開発者は誰もが、同じ危険な定型コードの何らかのバリエーションを書いてきました：stdout の非同期読み取り、stderr の非同期読み取り、&lt;code&gt;WaitForExitAsync&lt;/code&gt;、両方のストリームをドレインするのを忘れるとデッドロックが発生する。これは長年知られている落とし穴です。&lt;/p&gt;
&lt;p&gt;.NET 11 がついにこれを適切に修正します。&lt;/p&gt;
&lt;h2 id="runandcapturetextasync"&gt;RunAndCaptureTextAsync&lt;/h2&gt;
&lt;p&gt;主要な追加：プロセスを起動し、stdout と stderr をキャプチャし、デッドロックなしに終了を待機する単一の静的メソッド。&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;1回の呼び出し。手動ストリームドレインなし。注意深く配置した &lt;code&gt;WaitForExit&lt;/code&gt; なし。何かを実行してその出力を得るだけなら、これが求めていた API です。&lt;/p&gt;
&lt;p&gt;出力をキャプチャせずに終了を待ちたい場合のために &lt;code&gt;Process.RunAsync&lt;/code&gt; もあります。&lt;/p&gt;
&lt;h2 id="killonparentexit"&gt;KillOnParentExit&lt;/h2&gt;
&lt;p&gt;起動されたプロセスでよくある問題：親プロセスがクラッシュまたは終了された場合、子プロセスはオーファンとして実行し続けます。&lt;code&gt;KillOnParentExit&lt;/code&gt; を使用すると、プロセス起動時に親プロセスが終了したときに子プロセスも終了することをあらかじめ宣言できます。&lt;/p&gt;
&lt;p&gt;この機能はプラットフォーム固有の方法（Windows ではジョブオブジェクト、Linux では prctl）で存在していましたが、.NET から使用するには p/invoke またはサードパーティライブラリが必要でした。今では &lt;code&gt;ProcessStartInfo&lt;/code&gt; のファーストクラスのプロパティになりました。&lt;/p&gt;
&lt;h2 id="safeprocesshandle-ベースの-api"&gt;SafeProcessHandle ベースの API&lt;/h2&gt;
&lt;p&gt;新しい軽量 API サーフェスは、完全な &lt;code&gt;Process&lt;/code&gt; クラスではなく &lt;code&gt;SafeProcessHandle&lt;/code&gt; を中心に構築されています。完全な &lt;code&gt;Process&lt;/code&gt; クラスは多くの状態を抱えており、トリムが困難です — &lt;code&gt;SafeProcessHandle&lt;/code&gt; パスは出力サイズを最小化する必要があるアプリケーション（WASM、ネイティブ AOT）にとってよりトリマーフレンドリーです。&lt;/p&gt;
&lt;h2 id="ハンドル継承の完全制御"&gt;ハンドル継承の完全制御&lt;/h2&gt;
&lt;p&gt;このアップデートでは、子プロセスが継承するハンドルと標準ハンドルのリダイレクト方法に対するきめ細かい制御も追加されます。以前は stdin/stdout/stderr をリダイレクトできましたが、OS レベルでどのハンドルを継承するかを正確に指定することはできませんでした。新しい API はそのコントロールを公開します。&lt;/p&gt;
&lt;h2 id="なぜ重要か"&gt;なぜ重要か&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Process&lt;/code&gt; クラスはツール、ビルドシステム、テストランナー、および他の実行ファイルを呼び出すあらゆるアプリケーションで使用されています。古い API サーフェスは .NET Framework 時代のものであり、時代遅れになっていました。これは破壊的変更ではありません — 古い API は引き続き動作します — しかし新しいコードは新しいサーフェスを優先すべきです。&lt;/p&gt;
&lt;p&gt;トリムされたアプリケーションや AOT コンパイルシナリオでは、&lt;code&gt;SafeProcessHandle&lt;/code&gt; パスが特に歓迎されます。古い &lt;code&gt;Process&lt;/code&gt; クラスはトリムを複雑にするリフレクション重いコードを多く持ち込んでいました。&lt;/p&gt;
&lt;p&gt;元の記事: &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>