Language

ProcessStartInfo.InheritedHandles プロパティ

定義

子プロセスによって継承されるハンドルの一覧を取得または設定します。

public:
 property System::Collections::Generic::IList<System::Runtime::InteropServices::SafeHandle ^> ^ InheritedHandles { System::Collections::Generic::IList<System::Runtime::InteropServices::SafeHandle ^> ^ get(); void set(System::Collections::Generic::IList<System::Runtime::InteropServices::SafeHandle ^> ^ value); };
public System.Collections.Generic.IList<System.Runtime.InteropServices.SafeHandle>? InheritedHandles { get; set; }
member this.InheritedHandles : System.Collections.Generic.IList<System.Runtime.InteropServices.SafeHandle> with get, set
Public Property InheritedHandles As IList(Of SafeHandle)

プロパティ値

子プロセスによって明示的に継承される SafeHandle オブジェクトの一覧。既定のハンドル継承動作を使用する null 。

注釈

このプロパティが nullされていない場合、ハンドルの継承は標準ハンドルとこの一覧のハンドルに制限されます。 リストが空の場合、標準ハンドルのみが継承されます。

この一覧では、 SafeFileHandle と SafePipeHandle のみがサポートされています。

ハンドルの継承を制御するためのネイティブ サポートがない Unix システムでこのプロパティを設定すると、プロセスの開始パフォーマンスが大幅に低下する可能性があります。

この一覧のハンドルでは、事前に継承を有効にしないでください。 その場合、異なる API で同時に開始された他のプロセスによって意図せず継承され、セキュリティまたはリソース管理の問題につながる可能性があります。

InheritedHandlesで同じハンドルを渡す 2 つの同時実行プロセスの開始はサポートされていません。 Windows、実装は各ハンドルの継承フラグを一時的に変更します。 これらの変更は、同時実行が同じハンドルの共有を開始してもスレッド セーフではありません。

この API は、trueに設定UseShellExecute、または UserName プロパティを使用してユーザー名を指定する場合と共に使用することはできません。

Windows、実装では、SetHandleInformation を使用してハンドルのフラグを変更することで、この一覧の各ハンドルの継承を一時的に有効にします。 子プロセスが作成されると、これらのハンドルで継承が無条件に無効にされ、異なる API で開始された他のプロセスによって継承されなくなります。 ハンドル自体は重複していません。継承可能になり、子プロセスに渡されます。

Unix では、FD_CLOEXEC フラグを削除することで、子プロセスの各ファイル記述子が変更されます。 変更はフォークの後と exec の前に行われるため、親プロセスには影響しません。

適用対象