Я отчаянно ищу причину сбоев в моем приложении на основе Qt.
После некоторого наблюдения я обнаружил, что одно только открытие QFileDialog, который является стандартным диалоговым окном файлов Windows, даже без выбора какого-либо файла, приводит к сбою приложения через несколько минут. Это происходит не на всех машинах.
Я открыл свое приложение в обходчике зависимостей, и профилирование показало, что при открытии файлового диалога загружаются тонны DLL, которые мне не нужны в моем приложении — все инструменты, подключенные в оболочке Windows. Среди других — TortoiseSVN, который даже делает зависание.
Возможно ли в контексте приложения предотвратить загрузку других DLL, таких как кодеки или перехватчики оболочки?
По крайней мере возможно ли создать QFileDialog без загрузки всего инструмента, подключенного в окнах?
Это определенно возможно, но это не тривиально. Что вам нужно сделать, это вставить хук API на LoadLibrary
(и / или эквивалент нативного API.) Когда вызывается ваш хук, вы можете проверить имя файла DLL и решить, хотите ли вы передать его реальному LoadLibrary
или верните ошибку.
Несколько мест, чтобы найти больше информации о хуках API:
Теперь, учитывая все вышесказанное, для вашей конкретной ситуации вам может быть лучше просто изменить настройки TortoiseSVN. Если вы зададите пути включения / исключения в Tortoise, чтобы просматривать только каталоги на вашем компьютере, содержащие репозитории SVN, то держу пари, что эта блокировка исчезнет, если вы избежите этих каталогов.