Один из наших пользователей пытается запустить наше (с открытым исходным кодом) программное обеспечение на своей 64-битной машине Windows 7 на своей работе.
К сожалению, ни версия GUI, ни версия программы из командной строки не запускаются на его компьютере. Программа запускается, но ничего не делает, а версия с графическим интерфейсом даже не открывает окно.
Я не думаю, что процесс на самом деле идет очень далеко. Вот представления Process Explorer потоков процесса на его и моей машине:
На своем компьютере с Windows 7:
На моей машине с Windows 10:
Наше программное обеспечение было построено с Visual Studio 2013 в 64-битном режиме. Среда выполнения MSVC включена. Он работал в течение многих лет, вероятно, на различных машинах.
Что возможно происходит?
Я рад добавить необходимые детали.
Обновление 1: у меня есть трассировки Process Monitor (* .pml файлы) для обеих машин, но, хотя я знаю, как их интерпретировать, я не уверен, какие выводы я могу из них сделать. Кто-нибудь заинтересован в том, чтобы посмотреть? Я немного не решаюсь публиковать их здесь, так как подозреваю, что они могут содержать конфиденциальную информацию.
Обновление 2: проблема воспроизводима на всех компьютерах с Windows 7, к которым у нас есть доступ, но не на других версиях Windows.
Обновление 3: предыдущая версия приложения работает нормально в Windows 7, а последняя - нет. Ничего не изменилось в том, как мы строим или упаковываем приложение.
Ответы:
Вот некоторые результаты, которые я запускаю в отладчике Microsoft WinDbg:
Посмотрите StackOverflow, что такое блокировка загрузчика .
Это действительно происходит в самом начале процедуры запуска программы.
На стеках вызовов я вижу
Так что это может быть (но не обязательно) тупик: поток ранее заблокировал критическую секцию и теперь ждет чего-то другого. Трудно сказать о x64, поскольку получить аргументы не так просто. В противном случае мы могли бы пересечь цепь ожидания.
источник
Причиной этой загадки оказалась комбинация подлинной ошибки в версии 1.61 библиотек Boost C ++ и некоторых деталей реализации в Windows 7:
https://svn.boost.org/trac/boost/ticket/12475
Предыдущий выпуск нашего приложения (1.4.0-бета) использует Boost 1.55 и не подвержен этой ошибке. Последний выпуск использует Boost 1.61, в котором есть ошибка.
источник