Создать двоичный файл в реестре Windows - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать двоичный файл в реестре Windows, чтобы изменить настройки представления совместимости в IE11.У нас есть несколько веб-приложений, которые требуют определенных настроек безопасности, и я хочу, чтобы пользователи могли легко их изменить.Я не могу просто установить настройки и заблокировать IE, так как настройки различны для каждого приложения.

Я пробовал это решение, но оно не работало. Преобразование шестнадцатеричной строки в массив и запись в реестр - VBSCript

Я работаю под управлением Windows 7 с IE11

Вот файл 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)

1 Ответ

0 голосов
/ 29 ноября 2018

Между прочим, вам не нужны административные привилегии для написания этого параметра, потому что это не параметр компьютера.Это просто пользовательская настройка, поэтому текущий инициатор также является текущим пользователем.

Во-вторых, вам также не нужно буквальное строковое значение 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)
...