У меня есть эта несколько необычная структура процесса:Почему/Как приложение сохраняет ссылки на мьютексы, созданные другим процессом?
- Launch4J начинается мое приложение Java. Он создает мьютекс для обеспечения функциональности с одним экземпляром.
- Приложение Java запускает приложение VB6.
- Когда приложение Java завершается, приложение VB6 все еще работает. (Желаемое поведение)
Проблема: Мьютекс, созданный Launch4J, освобождается только после того, как приложение VB6 завершается. Из-за этого невозможно снова запустить приложение Java.
Зачем это произошло? Я не открывая семафор ... Явно
я первый подозревал, что это происходит из-за Java с использованием CreateProcess
с bInheritHandles == true
, но проблема не когда я происходить подавление запуска notepad.exe
, например.
EDIT: У меня все еще есть эта проблема. Любые указатели оцениваются!
У вас есть просмотр с ProcessExplorer, что мутант все еще существует? Какой процесс принадлежит мутанту? –
Да, он есть. И я могу посмотреть изменение количества ссылок, когда начнется мое приложение VB6. Но я использую WinObj, который не показывает владельца, потому что я не мог найти ничего о мьютексах в ProcessExplorer. –
Вы можете просмотреть все ручки в ProcessExplorer через * View -> Lower Pane View -> Show Handles *. Это также покажет вам мьютексы, принадлежащие выбранному процессу. Или вы можете искать по имени мьютекса (Ctrl + F). –