Как Ошибка 2009 Года Приводит К Конфликту Docker Для Windows И Razer Synapse

Сегодня я столкнулся с очень интересной ошибкой: Docker для Windows не запускается, если у вас запущена панель управления драйвером Razer Synapse. Но самое интересное, почему это произошло.



Как ошибка 2009 года приводит к конфликту Docker для Windows и Razer Synapse

Оба приложения написаны таким образом, что одновременно может работать только один экземпляр.

Для этого они создают глобальный мьютекс, используя в качестве ключа GUID сборки .

NET, верно? Но, увы, они делают это неправильно, и причём одинаково неправильно.

Ошибочный код выглядит примерно так:

   

string.Format("Global\{0}", (object) Assembly.GetExecutingAssembly().

GetType().

GUID);

Идея состоит в том, чтобы получить GUID исполняемой сборки и создать на его основе мьютекс, который предотвратит запуск более чем одного экземпляра.

Но так быть не должно.

Не должно быть звонка

GetType()

.

Этот параметр возвращает не GUID конкретной сборки, а GUID встроенного типа .

NET, который описывает сборки как таковые.



System.Reflection.RuntimeAssembly

.

Поэтому, когда они создают мьютексы, они используют не GUID из своего собственного кода, а GUID из внутренних компонентов .

NET. И для обоих приложений этот GUID будет одинаковым.

Как это произошло? Забавно, но мы именно так мы знаем как.

Во всем виноват Stackoverflow! Еще в 2009 году пользователь с ником Nathan задал вопрос: " как получить GUID работающей сборки? Через 12 минут ему ответил пользователь Cerebrus, но в его ответе была ошибка.

Год и месяц спустя пользователь Yoopergeek указывает на ошибку.

Церебрус возвращается еще через три года и исправляет свой ответ, но удалить его уже нельзя, поскольку ответ помечен как «принятый».

Таким образом, ошибка при ответе на вопрос в 2009 году вызвала ошибку, существовавшую как минимум до марта 2018 года.

Домашнее задание для всех программистов, читающих этот пост: подумайте, как бы вы обнаружили такую ошибку в своем приложении? Копируешь код, он вроде работает, но даже не понимаешь, что он на самом деле сломан: ты же не запускаешь две программы с одной и той же ошибкой одновременно.

Вы узнаете о проблеме только тогда, когда пользователи начнут жаловаться.

Как можно изменить процесс разработки, чтобы выявить подобные ошибки перед выпуском? Теги: #программирование #.

NET #Ненормальное программирование #stackoverflow #ASP #ASP #bug #bug #copy-paste

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.