2009-09-02 5 views
1

У меня есть эта несколько необычная структура процесса:Почему/Как приложение сохраняет ссылки на мьютексы, созданные другим процессом?

  1. Launch4J начинается мое приложение Java. Он создает мьютекс для обеспечения функциональности с одним экземпляром.
  2. Приложение Java запускает приложение VB6.
  3. Когда приложение Java завершается, приложение VB6 все еще работает. (Желаемое поведение)

Проблема: Мьютекс, созданный Launch4J, освобождается только после того, как приложение VB6 завершается. Из-за этого невозможно снова запустить приложение Java.

Зачем это произошло? Я не открывая семафор ... Явно

я первый подозревал, что это происходит из-за Java с использованием CreateProcess с bInheritHandles == true, но проблема не когда я происходить подавление запуска notepad.exe, например.

EDIT: У меня все еще есть эта проблема. Любые указатели оцениваются!

+0

У вас есть просмотр с ProcessExplorer, что мутант все еще существует? Какой процесс принадлежит мутанту? –

+0

Да, он есть. И я могу посмотреть изменение количества ссылок, когда начнется мое приложение VB6. Но я использую WinObj, который не показывает владельца, потому что я не мог найти ничего о мьютексах в ProcessExplorer. –

+0

Вы можете просмотреть все ручки в ProcessExplorer через * View -> Lower Pane View -> Show Handles *. Это также покажет вам мьютексы, принадлежащие выбранному процессу. Или вы можете искать по имени мьютекса (Ctrl + F). –

ответ

1

Запускает ли Launch4J мьютекс и закрывает его ручку перед завершением? Извините, но я не знаю, как Java обертывает функции OS Mutex, но вы должны убедиться, что вы явно освобождаете мьютекс и закрываете его дескриптор до окончания потока.

+0

Launch4J создает родную оболочку Win32, поэтому на самом деле это не связано с Java. Да, количество ссылок на мьютексы уменьшается, как только приложение Java завершается. –

+0

Извините, я не предполагал, что проблема связана с Java, просто извиниться за то, что вы не можете сказать, какие методы вызывать. Существует разница между декретом ссылок Mutux, поскольку он был оставлен или потому, что он был выпущен правильно, именно эта разница я пытался указать. – pipTheGeek

 Смежные вопросы

  • Нет связанных вопросов^_^