2012-01-16 21 views
2

現在、WindowsレジストリからHTAファイルを読み書きするためにJavaScriptを書き込もうとしています。ここで私は書くために使用しています現在のコードは次のようになります。私は、regeditで値を確認するとき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 + '"'); 
    } 
} 

は残念ながら、彼らは変更されません。私は、レジストリパスがjavascriptで持っているのとまったく同じであることを二重に確認しました。それはエラーを返さないので、私はパスが正しいと仮定しています。

私はまた、代わりに

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

の、このmsdnページでいう

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

をしようとしようとしましたが、それはちょうど私に多くの問題を与えました。

ご協力いただきましてありがとうございます。ありがとう!

+0

私は最初にコードをテストすることなく、別のアプローチを提案しました。しかし、テストの後、私は元の答えを完全に変更しました。 – Abbas

+0

私はあなたのコードを実行し、それは完全に働いた。レジストリエディタ(regedit)とHTAアプリケーションを管理者として実行して、コードが行った変更を確認してください。 – Abbas

答えて

1

コードに基づいてwriteinRegistry()関数とreadFromRegistry()関数を含むサンプルHTA HTMLアプリケーションを作成しました。それはレジストリに価値を書いてそれを取得しました。問題はそれがどこに置かれたかということです。レジストリを検索した後、HKEY_CURRENT_USER \ VirtualStore \ MACHINE \ SOFTWARE \ Wow6432None \ CompanyName \ CompanyValuesにあります。これは:

    私は64ビットのWindows 7マシン上でこれを実行しているが、私は を上昇していない通常のユーザーとして実行されていた
  • MSHTA.exe(デフォルト)の32ビットバージョンを実行していた

そこで、C:\ Windows \ System32 \ MSHTA.exe TheNameOfMyScript.htaへのWindowsショートカットを作成しました。私が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を押すことをお勧めします。

関連する問題