ProcessStartInfo.InheritedHandles 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得或設定一個讓子程序繼承的句柄清單。
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符合時,handle 繼承限制於標準 handle 及此列表中的 handle。 若清單為空,則僅繼承標準的 handle。
此列表僅 SafeFileHandle 支援 和 SafePipeHandle 。
在沒有原生控制句柄繼承支援的 Unix 系統上設定此屬性,可能會嚴重降低程序啟動效能。
此清單中的句柄不應事先啟用繼承。 若有,可能會被同時使用不同 API 啟動的其他程序無意中繼承,導致安全或資源管理問題。
不支援兩個同時通過相同句柄的 InheritedHandles 程序啟動。 在 Windows 上,實作會暫時修改每個句柄的繼承標誌。 這些修改在共用同一個帳號的同時開始時,並不安全執行緒。
這個 API 不能與 UseShellExecute set to true 或 在透過屬性 UserName 指定使用者名稱時一起使用。
在 Windows 上,實作透過使用 SetHandleInformation 修改該句柄的旗標,暫時啟用該清單中每個句柄的繼承。 子程序建立後,這些句柄的繼承會被無條件停用,以防止其他以不同 API 啟動的程序繼承它們。 把手本身沒有複製;這些權利會被賦予可遺傳性,並傳給子程序。
在 Unix 上,實作會修改子程序中的每個檔案描述符,移除 FD_CLOEXEC 旗標。 修改發生在 fork 之後和執行檔之前,因此不會影響父程序。