我正在阅读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'
注册表项中的根目录无效
我检查并仔细检查了密钥确实存在,并且此代码在我们的旧服务器上运行,因此我认为这是IIS中的配置问题。如果我能找到它,我会被诅咒。 ASP Classic已安装并启用,我在Windows Server 2008 R2 x64上使用IIS 7.5。希望有人知道问题所在。
编辑:我下载了Process Monitor来查看注册表访问权限。经过一番搜索。我发现它实际上是在“HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Odyssey \ value”中查找键。我认为这与64x的服务器有关。我不想将密钥移动到该位置,因为它们可能永远不会再被发现,尤其是当代码指向不同的目录时。
有没有办法停止此重定向或更改结构以便这可以工作?
提前感谢您的帮助。
道格
答案 0 :(得分:3)
正如在我的问题的编辑中所提到的,问题似乎是URL被重定向,因为它是x64系统。我最终移动了我试图访问HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Odyssey
的注册表。然后,我稍微修改了代码,专门查找该位置的密钥。
regLink = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Odyssey\"
由于我自己指定了Wow6432Node,系统不会添加另一个。我宁愿将密钥保存在以前的位置,但至少代码指向它们所在的位置。如前所述,有人在查看代码时永远不会猜到要查看Wow6432Node目录。重要的是,密钥不会丢失到Windows注册表系统的深处。