在HTA文件中使用Javascript从Windowsregistry读取/写入

我目前正在尝试编写Javascript以读取和写入HTA文件中的Windowsregistry。 以下是我正在使用的代码:

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 + '"'); } } 

不幸的是,当我检查registry中的值时,它们保持不变。 我一定要仔细检查,registrypath是完全一样的,我有它在JavaScript中。 它不会返回错误,所以我假设path是正确的。

我也试图尝试

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

就像在这个msdn页面中提到的那样,而不是

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

但那只是给了我更多的问题。

任何帮助表示赞赏! 谢谢!

我写了一个示例HTA HTML应用程序,其中包括基于您的代码的函数writeinRegistry()和readFromRegistry()函数。 它向注册表写了一个值并将其检索。 问题在于它放在哪里。 搜索注册表后,我发现它在HKEY_CURRENT_USER \ VirtualStore \ MACHINE \ SOFTWARE \ Wow6432None \ CompanyName \ CompanyValues。 这是因为:

  • 我在一台64位的Windows 7机器上运行它,但执行MSHTA.exe的32位版本(默认)
  • 我正在作为一个普通用户没有提升

于是,我创建了一个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> 

我发现,当你在代码中更新注册表项时, regedit.exe是打开/运行的,在代码运行后按regedit F5来刷新它是一个好主意。