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 error '80070002'
Invalid root in registry key

我已经检查并仔细检查了密钥确实存在,并且这段代码在我们的旧服务器上运行,所以我认为这是 IIS 中的配置问题。如果我能找到它,我会被诅咒的。ASP Classic 已安装并启用,我在 Windows Server 2008 R2 x64 上使用 IIS 7.5。希望有人知道问题所在。

编辑:我下载了进程监视器来查看注册表访问。经过一番搜索。我发现它实际上是在“HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Odyssey\value”中寻找密钥。我认为这与服务器为 64 倍有关。我不想将密钥移动到该位置,因为它们可能永远不会再找到,尤其是当代码指向不同的目录时。

有没有办法停止这种重定向或改变结构,所以这可以工作?

在此先感谢您的帮助。

道格

4

1 回答 1

3

正如我的问题的编辑中提到的,问题似乎是 URL 被重定向,因为它是 x64 系统。我最终移动了我试图访问的注册表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Odyssey。然后我稍微修改了代码以专门查找该位置的键。

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

由于我自己指定了 Wow6432Node,因此系统不会再添加一个。我宁愿将密钥保留在以前的位置,但至少代码指向它们所在的位置。和以前一样,查看代码的人永远不会猜到会查看 Wow6432Node 目录。重要的部分是密钥不会丢失到 Windows 注册表系统的深处。

于 2013-08-26T23:37:18.353 回答