2012-01-16 101 views
2

我正在尝试编写Javascript以便从HTA文件的Windows注册表中读取和写入。以下是我正在使用的当前代码:在HTA文件中使用Javascript从Windows注册表中读取/写入

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"); 

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

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

+0

我提出了另一种方法,不先测试你的代码。但是,经过测试,我完全改变了我原来的答案。 – Abbas 2012-01-16 22:50:27

+0

我运行了你的代码,它完美运行。确保以管理员身份运行注册表编辑器(regedit)以及HTA应用程序,以观察代码所做的更改。 – Abbas 2012-01-27 05:19:44

回答

1

我写了一个示例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> 
0

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