.net - 如何在.NET中创建可继承的信号量?

标签 .net winapi process semaphore

我试图创建一个可继承的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的调用中使用该值。)



我怀疑我需要构造一个特殊的SemaphoreSecurityProcessStartInfo对象,但是我还没有弄清楚。

最佳答案

一种选择是只包装用于创建信号量并启动子进程的C ++代码,然后通过P / Invoke(或使用C ++ / CLI)对其进行调用。

关于.net - 如何在.NET中创建可继承的信号量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2534497/

相关文章:

.net - UI 测试自动化模式

c++ - 让用户在不退出进程的情况下关闭进程的分配控制台?

c# - 如何使用模态窗口将 WM_INPUTLANGCHANGEREQUEST 发送到应用程序?

java - 使用Java按顺序运行命令行命令

qt - Qt中如何获取所有正在运行的进程

java - 识别流程的操作

c# - 给接口(interface)添加属性

c# - Visual Studio 调试显示 ‘Start’ 而不是浏览器

python - win32 上的 64 位 Anaconda 使用 32 位还是 64 位?

mysql - C++ .net float 到 System::String^