我正在使用 Windows 脚本托管 (JScript)。我的主要目标是知道注册表项是否存在。我正在尝试“RegRead”此密钥,如果它引发错误,则密钥不存在(这就是文档所说的http://msdn.microsoft.com/en-us/library/x05fawxd(v=vs.84) .aspx)。在 Win7 中一切正常,但是当我在 WinXP 中测试我的代码时它失败了。问题是,当您尝试没有设置默认值的“RegRead”键时,它会抛出错误(仅在 WinXP 上,在 Win7 上没问题)。更恶心的一点是,当你尝试读取不存在的键时,错误号是相等的(错误消息:注册表项“HKEY_CURRENT_USER\Software\NonExistKey\”中的根无效。错误代码:80070002)和没有默认值的现有键(错误消息:无法打开注册表项“HKEY_CURRENT_USER\Software\”进行读取。错误代码:80070002)。是的,错误消息是不同的,但我不想比较消息或使用 indexOf("invalid") 或 indexOf("unable") 来区分一个错误和另一个错误,因为在不同的 Windows 语言环境中会有不同的消息和单词。这是我的示例代码,只需使用此内容制作一个 JS 文件并运行它。
var shell = new ActiveXObject('WScript.Shell');
try{
var valueKeyExist = shell.RegRead('HKEY_CURRENT_USER\\Software\\');
}catch(e2) {
WScript.Echo([e2.message, e2.number]);
}
if (e2 !== undefined) {
try{
var valueNonExistKey = shell.RegRead('HKEY_CURRENT_USER\\Software\\NonExistKey\\');
}catch(e1) {
WScript.Echo([e1.message, e1.number]);
}
WScript.Echo('Seems like you are running this script on WinXP and reading reg key with default value not set throws an error.\nError messages are equal: ' + (e1.message == e2.message) + '\nError numbers are equal: ' + (e1.number == e2.number));
} else {
WScript.Echo('Seems like you are running this script on Win7 and reading reg key with default value not set is ok');
}
有什么建议可以解决这个问题,或者我怎么知道注册表项是否存在?