【发布时间】:2011-10-12 12:40:12
【问题描述】:
我有一个用 QT 编写的程序,运行良好。然而,它间接依赖于 dnssd.dll,因为程序加载的 dll 使用 bonjour。如果运行程序的机器上没有安装 bonjour,它会说
程序无法启动,因为您的文件中缺少 dnssd.dll 电脑。尝试重新安装程序以解决问题。
我没有通过LoadLibrary 或其他方式加载此dll。我将二进制文件与存根链接,因此它会在 int main 之前自动加载。
显然重新安装程序并不能解决问题。对我来说,它清楚地表明我需要安装 bonjour,但对于大多数用户来说,这非常神秘。
我希望此错误消息包含更多信息,例如“需要安装 Bonjour 才能使此应用程序正常工作,请转到 [insert-url-here] 下载它。”
有没有办法检测 dll 何时加载失败并给出更好的错误消息?
【问题讨论】:
-
为什么不将 Bonjour 打包到安装程序中(如果不知道您使用的是哪种安装程序就无法说明如何),或者类似的东西?
-
好主意。人们倾向于卸载它,因为他们不知道它是什么。这也很麻烦,并且会创建一个更复杂和脆弱的安装程序。必须知道 bonjour 已经安装,等等。
-
那么,您更喜欢更复杂、更脆弱的应用程序吗?好的安装程序框架为大多数这些问题提供了强大的解决方案。这不是一个未解决的问题。
-
@R.MartinhoFernandes 是的,我愿意。我对安装程序的经验是使其尽可能简单。安装程序很难测试,基本上应该只是将文件复制到一个文件夹中。这几乎就是 Android 和 Windows 8 商店的做法,并且安装几乎从不失败。我们在 Windows 桌面世界中可以从中学到很多东西。