1

我有一个安装程序(只是一个常规的 C++ MFC 程序,不是基于 Windows Installer),它需要根据 Internet 连接的类型设置一些注册表值:宽带、拨号和/或无线。目前,这些信息是通过询问一系列是或否问题来确定的。问题是进行安装的人与拥有和使用计算机的人不同,因此他们并不总是确定这些问题的答案应该是什么。有没有办法以编程方式确定这些信息?该代码是用 C++(和可选的 MFC)编写的,适用于 Windows XP 及更高版本。基于 .NET 的解决方案不是一个选项,因为我不想在我们的安装程序可以运行之前确定是否安装了框架。

澄清一下,问题主要是无线和拨号连接不是“永远在线”,这导致我们的产品需要以不同的方式运行,因为我们的服务器并不总是可用。因此,严格的速度测量解决方案无济于事,尽管有一个与速度相关的设置,因此产品在连接后不会尝试通过拨号连接发送 MB 的信息。

4

6 回答 6

3

[我不知道如何准确获取您要求的信息,但是...] 也许您可以(为自己)改写您尝试完成的内容?比如,不要问“用户有宽带还是拨号上网”,而是问“用户的互联网连接有多少带宽”——然后你可以尝试在没有任何用户输入的情况下回答改写后的问题(比如通过测量带宽)。

顺便提一句。如果您只询问用户“宽带或拨号”,您可能会遇到一些问题:

  • 如果用户有一些你没有预料到的连接类型怎么办?
  • 如果用户不知道怎么办(因为只有一根以太网电缆连接到 PPPoE DSL 调制解调器/路由器)?
  • 如果用户通过一系列连接(通过拨号连接 VPN,连接到其他有宽带的网络)怎么办?

在这些情况下,询问“能力”而不是“类型”可能更有用。

于 2008-09-18T15:37:53.777 回答
2

使用 InternetGetConnectedState API 检索 Internet 连接状态。

我测试了它,它工作正常。

我发现这个文件可以提供帮助:

http://www.pcausa.com/resources/InetActive.txt

于 2010-01-18T20:47:12.673 回答
1

关于“互联网连接是否永久?”的问题:

  • 最好的方法可能是使应用程序足够强大,以始终应对非永久连接:-) 这与拨号和宽带相同......
  • 或者,也许您可​​以找出用户的互联网连接已经建立了多长时间,并与系统正常运行时间进行比较?如果连接几乎在计算机运行期间一直在线,则它可能是永久连接。

无论如何,这些启发式方法对于模糊的连接类型可能会失败。

另外,关于不发送大量数据的问题:如果人们有“宽带+低流量限制”的资费,即使带宽允许,也不应该发送大量数据:-)

于 2008-09-18T17:10:25.567 回答
0

最好的办法是获取默认的活动网络连接,确保它是互联网连接(ping google.com 或类似的),然后询问它是什么类型的设备。您应该能够从中确定用户具有什么连接。

我相当有信心这是可能的,但不知道如何去做。

于 2008-09-18T15:27:06.967 回答
0

我认为你应该做一个快速的连接速度测试。只需下载一些特定大小的文件,时间需要多长时间,您就会知道速度。我同意其他人的观点,不要问他们有什么类型的连接,更重要的是速度。也许明年他们会推出 100mbit 拨号……您是否希望每个人都使用这款令人惊叹的新设备来获得您应用的低带宽版本?

于 2008-09-18T15:45:41.963 回答
0

正如您所暗示的那样,我同意 Oliver:您已经具备应对连接丢失的功能,为什么不默认启用它。

宽带连接可能会搞砸:冻结的路由器软件(对我来说经常发生),或油炸的电源适配器,...

于 2008-09-18T17:34:04.590 回答