我有一个安装程序(只是常规的C ++ MFC程序,而不是基于Windows Installer的程序),需要根据Internet连接的类型设置一些注册表值:宽带,拨号和/或无线。现在,这些信息是通过询问一系列是或否问题来确定的。问题是,进行安装的人不是拥有和使用计算机的人,因此他们并不总是确定这些问题的答案应该是什么。有没有办法以编程方式确定任何此类信息?对于Windows XP及更高版本,代码是用C ++(以及可选的MFC)编写的。基于.NET的解决方案不是一个选项,因为我不想在安装程序运行之前确定是否安装了框架。
为了澄清,问题主要是无线和拨号连接不是“永远在线”,这使得我们的产品需要以不同的方式运行,因为我们的服务器并不总是可用。因此,严格的速度测量解决方案无济于事,尽管有一个速度依赖的设置,因此产品一旦连接就不会尝试通过拨号连接发送MB信息。
答案 0 :(得分:3)
[我不知道如何准确地获取你要求的信息,但是......]也许你可以改写(为自己)你想要完成的事情?比如,不是询问“用户是否有宽带或拨号”,而是询问“用户的互联网连接带有多少带宽” - 然后您可以尝试在没有任何用户输入的情况下回答重新编写的问题(例如通过测量带宽)。 / p>
顺便说一下。如果你问用户只是“宽带或拨号”,你可能会遇到一些问题:
在这些情况下,要求“能力”而不是“类型”可能更有用。
答案 1 :(得分:2)
使用InternetGetConnectedState API检索互联网连接状态。
我测试了它并且工作正常。
我发现这个文件可以提供帮助:
答案 2 :(得分:1)
关于“互联网连接是永久性的吗?”:
无论如何,这些启发式方法可能会因为模糊的连接类型而失败。
此外,关于不发送大量数据的观点:如果人们有“宽带+低流量限制”关税,即使带宽允许,也不应发送大量数据: - )
答案 3 :(得分:0)
最好的办法是获取默认的有效网络连接,确保它是互联网连接(ping google.com或类似网站),然后询问它是什么类型的设备。您应该能够确定用户具有什么连接。
我相信这是可能的,但不知道如何去做。
答案 4 :(得分:0)
我认为你应该做一个快速的连接速度测试。只需下载一些特定大小的文件,花费多长时间,你就会知道速度。我同意另一个人,不要问他们有什么类型的连接,更重要的是速度。也许明年他们会推出100mbit拨号......你是否希望每个人都使用这款神奇的新设备来获得你应用的蹩脚低带宽版本?
答案 5 :(得分:0)
我同意oliver,因为你暗示:你已经有了处理连接丢失的功能,为什么不默认启用它。
宽带连接可能搞砸了:冻结的路由器软件(对我来说发生了很多),或薯条的poweradapter,......