2

ASP Classic でいくつかのレジストリを読み取って、必要な値を取得し、それらをアプリケーション レベルの変数として保存しています。global.asa ファイルには、次のコードがあります。

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
    Application("test") = "testing..."
    Dim WSHShell, regLink
    Set WSHShell = CreateObject("WScript.Shell")
    regLink = "HKEY_LOCAL_MACHINE\SOFTWARE\Odyssey\"

    Application("test2") = WSHShell.RegRead(regLink & "value")
End Sub
</SCRIPT>

私の test.asp ファイルでは、"test" 変数と "test2" 変数を出力するだけです。ただし、test.asp を実行すると、次のエラー メッセージが表示されます。
WshShell.RegRead エラー '80070002'
Invalid root in registry key

キーが実際に存在することを確認し、再確認しました。このコードは古いサーバーで機能したため、IIS の構成の問題だと思います。見つかったら大変だけど。ASP Classic をインストールして有効にし、Windows Server 2008 R2 x64 で IIS 7.5 を使用しています。うまくいけば、誰かが問題が何であるかを理解しています。

編集:プロセスモニターをダウンロードして、レジストリアクセスを確認しました。いくつかの検索の後。実際には「HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Odyssey\value」でキーを探していることがわかりました。これは、サーバーが 64x であることと関係があると思います。特にコードが別のディレクトリを指している場合は、二度と見つからない可能性が高いため、キーをその場所に移動したくありません。

このリダイレクトを停止するか、構造を変更してこれが機能するようにする方法はありますか?

よろしくお願いします。

ダグ

4

1 に答える 1

3

私の質問の編集で述べたように、問題は、x64 システムであったために URL がリダイレクトされていたことにあるようです。アクセスしようとしていたレジストリを移動してしまいましたHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Odyssey。次に、コードを少し変更して、その場所にあるキーを具体的に検索しました。

regLink = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Odyssey\"

自分で Wow6432Node を指定したので、システムは別のノードを追加しません。キーを以前の場所に保持したかったのですが、少なくともコードはそれらの場所を指しています。以前と同じように、コードを見た人は、Wow6432Node ディレクトリを見たとは決して思いませんでした。重要な部分は、キーが Windows レジストリ システムの奥深くまで失われないことです。

于 2013-08-26T23:37:18.353 に答える