Использование Javascript в файле HTA для чтения / записи из реестра Windows - PullRequest
2 голосов
/ 16 января 2012

В настоящее время я пытаюсь написать Javascript для чтения и записи из реестра Windows в файле HTA. Вот текущий код, который я использую для записи:

writeInRegistry = function (sRegEntry, sRegValue) {
    Regpath = "HKEY_LOCAL_MACHINE\\Software\\CompanyName\\CompanyValues\\" + sRegEntry;

    try {
        var oWSS = new ActiveXObject("WScript.Shell");

        oWSS.RegWrite(Regpath, sRegValue, "REG_DWORD");
        oWSS = null;


    } catch (e) {
        alert('Error trying to write "' + sRegValue + '" to registry entry "' + sRegEntry + '"');
    }
}

К сожалению, когда я проверяю значения в regedit, они остаются неизменными. Я удостоверился, что перепроверил, что путь к реестру точно такой же, как у меня в javascript. Ошибка не возвращается, поэтому я предполагаю, что путь правильный.

Я также пытался попробовать

var oWSS = WScript.CreateObject("WScript.Shell");

как указано на этой странице msdn вместо

var oWSS = new ActiveXObject("WScript.Shell");

но это только доставило мне больше проблем.

Любая помощь приветствуется! Спасибо!

Ответы [ 2 ]

1 голос
/ 31 января 2012

Я написал пример HTML-приложения HTA, включающего функции writeinRegistry () и readFromRegistry () на основе вашего кода. Он записал значение в реестр и получил его. Вопрос в том, где он это сделал. После поиска в реестре я нашел его в папке HKEY_CURRENT_USER \ VirtualStore \ MACHINE \ SOFTWARE \ Wow6432None \ CompanyName \ CompanyValues. Это потому что:

  • Я выполнял это на 64-битной машине с Windows 7, но выполнял 32-битную версию MSHTA.exe (по умолчанию)
  • Я работал как обычный пользователь без повышений

Итак, я создал ярлык Windows для C: \ Windows \ System32 \ MSHTA.exe TheNameOfMyScript.hta. Чтобы убедиться, что у меня запущена 64-разрядная версия, а затем я выполнил ярлык с повышением прав (Запустите ярлык от имени администратора). После этого раздел реестра в ветви HKLM обновился.

<html>
<head>
<title>RegTest</title>
<script language="JavaScript">
function writeInRegistry(sRegEntry, sRegValue)
{
  var regpath = "HKEY_LOCAL_MACHINE\\Software\\CompanyName\\CompanyValues\\" + sRegEntry;
  var oWSS = new ActiveXObject("WScript.Shell");
  oWSS.RegWrite(regpath, sRegValue, "REG_DWORD");
}

function readFromRegistry(sRegEntry)
{
  var regpath = "HKEY_LOCAL_MACHINE\\Software\\CompanyName\\CompanyValues\\" + sRegEntry;
  var oWSS = new ActiveXObject("WScript.Shell");
  return oWSS.RegRead(regpath);
}

function tst()
{
  writeInRegistry("Version", "101");
  alert(readFromRegistry("Version"));
}
</script>
</head>
<body>
Click here to run test: <input type="button" value="Run" onclick="tst()"
</body>
</html>
0 голосов
/ 28 мая 2013

Я обнаружил, что когда вы обновляете ключи реестра в коде, пока regedit.exe открыт / работает, неплохо было бы нажать F5 в regedit, чтобы обновить его после запуска кода.

...