2010-03-28 69 views
3

我想創建一個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呼叫直接使用的值。)


我懷疑我需要構造一個特殊的SemaphoreSecurityProcessStartInfo對象,但我還沒有弄明白。

回答

1

一種選擇是包裝創建信號量的C++代碼並啓動子進程,並通過P/Invoke(或使用C++/CLI)調用它。

+0

在這種情況下,我想要一個完全託管的實現。 – pauldoo 2010-03-28 20:54:33

0

你可以只是PInvoke到CreateSemaphore和ReleaseSemaphore,只要記住要使用與第四個參數CreateSemaphore相同的名稱。