如何以编程方式从脚本中确定已安装的IE版本

时间:2010-01-20 21:17:58

标签: windows ruby internet-explorer scripting rake

我们有一个基于selenium-grid的自动化测试集群。

为了管理集群,我构建了一组Rake(Ruby)任务,可以启动,重启,ping和停止节点。我正在通过IE6,IE7和IE8等多种浏览器测试我们的应用程序。这意味着群集中的每个节点都必须知道安装了哪个版本的IE,以便它可以声明正确的selenium-grid配置文件名称(例如:"IE6 on Windows XP""IE8 on Windows Vista"),以便确定可以针对这些浏览器编写测试。

我的问题

我想在这里减少配置工作。如何以编程方式确定当前系统上运行的IE版本?我尝试了以下技术:

wmic product where "Vendor like '%Microsoft%'" get Name, Version

但这仅返回随Windows Installer一起安装的程序版本,因此IE不会显示在此列表中。

理想情况下,我希望能够从Rake脚本中确定这个,或者至少可以从Rake脚本中调用它。

3 个答案:

答案 0 :(得分:2)

您可以使用WMI,我知道它不是rake脚本,但您可以运行脚本(或创建.NET应用程序)并将结果提供给您的应用程序。

这是一种黑客攻击,但至少它会起作用。这是来自technet的一些代码。

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & _
    "\root\cimv2\Applications\MicrosoftIE")

Set colIESettings = objWMIService.ExecQuery _
    ("Select * from MicrosoftIE_Summary")

For Each strIESetting in colIESettings
    Wscript.Echo strIESetting.Version
Next

完整Source

获得此信息后,您可以使用命令行将信息传递给rake脚本。

rake YourScript[<argument from vbscript>]

编辑:您可以将此代码复制/粘贴到文件中,将其命名为whatever.vbs,然后使用 cscript 命令执行该脚本。

  

cscript // Nologo ie_version.vbs

答案 1 :(得分:1)

对于任何版本的Windows都试试这个:

Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft\Internet Explorer"

strValueName = "Version"

oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue

Wscript.Echo "Installed IE Version: " & strValue

Wscript.Echo "IE Version: " & Left(strValue,1)

答案 2 :(得分:0)

当我安装11.X时,注册表中的“版本”字段似乎说的是9.X,但是“ svcVersion”显示的是与IE11的“关于”框中显示的版本相同的

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\svcVersion

是更好的选择吗?