我正在尝试创建一个可继承的 Win32 Semaphore 对象。这意味着我启动的任何子进程都可能自动有权对同一个 Win32 对象进行操作。
我的代码目前如下所示:
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
对象,但我还没有弄清楚。