Как я могу избавиться от заброшенного мьютекса?
Резюме:
Есть ли способ очистить мьютекс, если процесс, который его создал, мертв и ушел?
Подробности:
Я использую мьютекс, чтобы убедиться, что запускается только один экземпляр моего приложения.
При тестировании нового кода (для автоматического обновления) я запустил Environment.Exit (0). Во время работы в режиме отладки мой мьютекс был очищен нормально.
Но когда я изменил сборку на «Release», мьютекс остается после вызова выхода и помечается как оставленный:
Я дважды проверил, чтобы убедиться, что еще не запущен процесс, к которому присоединен этот мьютекс.
Теперь каждый раз, когда я запускаю свое приложение, оно думает, что мьютекс все еще там и не будет запускать мое приложение. (Также происходит сбой, потому что он пытается отправить сообщение «запущенному» экземпляру приложения, чтобы показать себя.)
Я попытался освободить мьютекс следующим образом:
bool createdNew;
string applicationId = "18773:TestStudio";
var singleInstanceMutex = new Mutex(true, applicationId, out createdNew);
singleInstanceMutex.Close(); // Tried ReleaseMutex() too
но, конечно, это только получает и затем освобождает это.
Я знаю, что могу просто перезагрузиться, но я надеюсь на лучшее решение в случае, если это когда-нибудь произойдет в производстве.
Есть ли способ очистить мьютекс, если процесс, который его создал, мертв и ушел?