Eu tenho essa estrutura de processo um tanto incomum:
- O Launch4J inicia meu aplicativo Java. Ele cria um mutex para fornecer funcionalidade de instância única.
- O aplicativo Java inicia um aplicativo VB6.
- 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 № 1O 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.