3

継承可能な 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オブジェクトを作成する必要があると思われますが、まだわかりません。

4

2 に答える 2

1

1 つのオプションは、セマフォを作成して子プロセスを起動する C++ コードをラップし、P/Invoke を介して呼び出す (または C++/CLI を使用する) ことです。

于 2010-03-28T20:49:35.297 に答える
0

CreateSemaphore と ReleaseSemaphore に PInvoke を実行するだけで、CreateSemaphore の 4 番目のパラメーターと同じ名前を使用することを忘れないでください。

于 2010-03-30T03:58:09.977 に答える