Я пытаюсь создать объект семафор Win32, который наследуется . Это означает, что любые дочерние процессы, которые я запускаю, могут автоматически иметь право на один и тот же объект 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 ++). Он принимает идентификатор семафора в командной строке и использует значение непосредственно при вызове ReleaseSemaphore
.)
Я подозреваю, что мне нужно построить специальный объект SemaphoreSecurity
или ProcessStartInfo
, но я еще не понял этого.