我想創建一個Win32信號量對象,它是可繼承的。這意味着我啓動的任何子進程可能自動有權對同一個Win32對象執行操作。如何在.NET中創建可繼承的Semaphore?
我的代碼目前看起來如下:
Semaphore semaphore = new Semaphore(0, 10);
Process process = Process.Start(pathToExecutable, arguments);
但是在這個代碼量對象不能由子過程中使用。
我寫的代碼是來工作C++的端口。舊的C++代碼通過以下實現這一點:
SECURITY_ATTRIBUTES security = {0};
security.nLength = sizeof(security);
security.bInheritHandle = TRUE;
HANDLE semaphore = CreateSemaphore(&security, 0, LONG_MAX, NULL);
再後來,當CreateProcess
被稱爲bInheritHandles
參數設置爲TRUE
。
(在C#和C++情況下,兩個我使用相同的子過程(這是C++),它發生在命令行信號量ID,並在到ReleaseSemaphore
呼叫直接使用的值。)
我懷疑我需要構造一個特殊的SemaphoreSecurity
或ProcessStartInfo
對象,但我還沒有弄明白。
在這種情況下,我想要一個完全託管的實現。 – pauldoo 2010-03-28 20:54:33