2

私はこのやや変わったプロセス構造を持っています:

  1. Launch4J が Java アプリケーションを起動します。Java アプリケーションに単一インスタンス機能を提供するミューテックスを作成します。
  2. Java アプリケーションは、複数のインスタンスを持つことができる VB6 アプリケーションを開始します。
  3. Java アプリケーションが終了しても、VB6 アプリケーションはまだ実行されています。(望ましい行動)

問題は、Launch4J によって作成されたミューテックスが、VB6 アプリケーションの終了後にのみ解放されることです。そのため、Java アプリケーションを再度開始することはできません。

なぜこれが起こるのでしょうか?私はミューテックスを明示的に開いていません...

CreateProcess最初はwithを使用している Java が原因ではないかと疑っていましたが、たとえば、bInheritHandles == true起動すると問題は発生しません。notepad.exe

編集:私はまだこの問題を抱えています。どんなポインタでも大歓迎です!

4

3 に答える 3

1

Launch4J はミューテックスを解放し、終了する前にそのハンドルを閉じますか? 申し訳ありませんが、Java が OS Mutex 関数をどのようにラップしているかはわかりませんが、スレッドが終了する前に、mutex を明示的に解放し、そのハンドルを閉じる必要があります。

于 2009-09-03T08:55:17.300 に答える