/ / Por que / Como um aplicativo mantém referências mutex criadas por outro processo? - java, vb6, winapi, mutex, launch4j

Por que / Como um aplicativo mantém referências mutex criadas por outro processo? - java, vb6, winapi, mutex, launch4j

Eu tenho essa estrutura de processo um tanto incomum:

  1. O Launch4J inicia meu aplicativo Java. Ele cria um mutex para fornecer funcionalidade de instância única.
  2. O aplicativo Java inicia um aplicativo VB6.
  3. Quando o aplicativo Java termina, o aplicativo VB6 ainda está em execução. (Comportamento desejado)

O problema é: O mutex criado pelo Launch4J é liberado somente após o término do aplicativo VB6. Por isso, é impossível iniciar o aplicativo Java novamente.

Por que isso aconteceria? Eu não estou abrindo o mutex explicitamente ...

Eu primeiro suspeitei que é por causa do Java usando CreateProcess com bInheritHandles == true, mas o problema não ocorre quando inicio notepad.exe por exemplo.

EDITAR: Eu ainda tenho esse problema. Todos os ponteiros são apreciados!

Respostas:

1 para resposta № 1

O Launch4J libera o mutex e fecha suamanipular antes de terminar? Sinto muito, mas não sei como o Java agrupa as funções do SO Mutex, mas você deve garantir que libere explicitamente o mutex e feche seu identificador antes que o encadeamento termine.