首页 > 解决方案 > 在 Windows 注册表中创建二进制文件

问题描述

我正在尝试在 Windows 注册表中创建一个二进制文件来更改 IE11 中的兼容性视图设置。我们有一些需要某些安全设置的 Web 应用程序,我想让用户轻松更改设置。我不能只设置设置并锁定 IE,因为每个应用程序的设置都不同。

我已经尝试过这个解决方案,但没有奏效。将十六进制字符串转换为数组并将其写入注册表 - VBSCript

我正在使用 IE11 运行 Windows 7

这是我现在拥有的 vbs 文件。我没有收到错误,但它也没有向注册表写入任何内容。

strHexValue = "41,1f,00,00,53,08,ad,ba,01,00,00,00,38,00,00,00,01,00,00,00,01,00,00,00,0c,00,00,00,8c,96,3d,03,41,87,d4,01,01,00,00,00,0d,00,6e,00,61,00,76,00,69,00,6d,00,65,00,64,00,69,00,78,00,2e,00,63,00,6f,00,6d,00"

arrValue = Split(strHexValue, ",")
ReDim uBinary(UBound(arrValue))
For i = LBound(arrValue) To UBound(arrValue)
    uBinary(i) = CLng("&h" & arrValue(i))
Next

Const HKEY_CURRENT_USER = &H80000001
Set objRegistry = GetObject("Winmgmts:root\default:StdRegProv")
strPath = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData"
strValueToWrite = "UserFilter"
intReturn = objRegistry.SetBinaryValue(HKEY_CURRENT_USER, strPath, strValueToWrite, uBinary)

标签: internet-explorervbscriptregistry

解决方案


仅供参考,您不需要管理权限来编写此设置,因为它不是机器设置。这只是一个用户设置,因此当前调用者也是当前用户。

HKEY_CURRENT_USER\其次,您也不需要strPath. 您已经在使用之前定义的常量,该常量命名HKEY_CURRENT_USER为方法中的第一个参数.SetBinaryValue

更改strPath如下。

strPath = "Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData"

其余代码看起来不错,但由于.SetBinaryValue不会在路径中隐式创建子键,因此您需要确保要写入数据的键存在。为此,请在您调用objRegistry.SetBinaryValue.

objRegistry.CreateKey HKEY_CURRENT_USER, strPath 

如果它不存在,这将创建密钥,因此您的.SetBinaryValue调用可以按预期工作。

进行这些更改后,您的代码的最终版本应如下所示。

strHexValue = "41,1f,00,00,53,08,ad,ba,01,00,00,00,38,00,00,00,01,00,00,00,01,00,00,00,0c,00,00,00,8c,96,3d,03,41,87,d4,01,01,00,00,00,0d,00,6e,00,61,00,76,00,69,00,6d,00,65,00,64,00,69,00,78,00,2e,00,63,00,6f,00,6d,00"

arrValue = Split(strHexValue, ",")
ReDim uBinary(UBound(arrValue))
For i = LBound(arrValue) To UBound(arrValue)
    uBinary(i) = CLng("&h" & arrValue(i))
Next

Const HKEY_CURRENT_USER = &H80000001
Set objRegistry = GetObject("Winmgmts:root\default:StdRegProv")
strPath = "Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData"
strValueToWrite = "UserFilter"
objRegistry.CreateKey HKEY_CURRENT_USER, strPath
intReturn = objRegistry.SetBinaryValue(HKEY_CURRENT_USER, strPath, strValueToWrite, uBinary)

推荐阅读