Улучшение сообщения об ошибке отсутствия dll

#c #qt #dll #bonjour

#c #qt #dll #bonjour

Вопрос:

У меня есть программа, написанная на QT, которая работает просто отлично. Однако он имеет косвенную зависимость от dnssd.dll, поскольку dll, загружаемая программой, использует bonjour. Если bonjour не установлен на компьютере, на котором запущена программа, он скажет

Программа не может запуститься, потому что dnssd.dll отсутствует на вашем компьютере. Попробуйте переустановить программу, чтобы устранить проблему.

Я не загружаю эту dll через LoadLibrary или иным образом. Я связал двоичный файл с заглушкой, чтобы он загружался автоматически раньше int main .

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

Я бы предпочел, чтобы это сообщение об ошибке было чем-то более информативным, например: «Для правильной работы этого приложения необходимо установить Bonjour, перейдите к [insert-url-here], чтобы загрузить его».

Есть ли способ определить, когда dll не удается загрузить loke this, и выдать лучшее сообщение об ошибке?

Комментарии:

1. Почему бы вам не упаковать Bonjour в установщик (не могу сказать, как, не зная, какой установщик вы используете) или что-то подобное?

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

3. Итак, вместо этого вы предпочитаете более сложное и хрупкое приложение? Хорошие платформы установки предоставляют надежные решения для большинства этих проблем. Это не нерешенная проблема.

4. @R.MartinhoFernandes да, я делаю. Мой опыт работы с установщиками заключается в том, чтобы сделать его как можно более простым. Установщики очень сложны в тестировании и должны в основном просто копировать файлы в папку. Это в значительной степени то, как это делает Android, а также магазин Windows 8, и установка там практически никогда не завершается неудачно. Нам, в мире настольных компьютеров Windows, есть чему поучиться у этого.

Ответ №1:

Установите его на задержку загрузки, затем как можно раньше (до того, как вы вызовете загрузку), попробуйте загрузить его самостоятельно (с помощью LoadLibrary) и сообщите о проблеме.

http://msdn.microsoft.com/en-us/library/151kt790.aspx

Комментарии:

1. итак, по сути, вы говорите, что нет способа определить, когда dll, которая была связана с заглушкой, не загружается?

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

3. На самом деле вам не нужно выполнять вызовы через GetProcAddress или что-то в этом роде. Вы собираетесь загружаться только для проверки наличия библиотеки — затем вы вызываете функции, как обычно, зная, что процесс загрузки завершится успешно — Задержка загрузки просто перемещает LoadLibrary, выполняемую средой выполнения, в то время, когда вы фактически используете DLL.