継承可能な 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++) を使用しています。コマンド ラインでセマフォ ID を取得し、その値を の呼び出しで直接使用しますReleaseSemaphore
。)
スペシャルSemaphoreSecurity
またはProcessStartInfo
オブジェクトを作成する必要があると思われますが、まだわかりません。