Windows xp 64bit sp2
今天,纠结于一个问题,在登陆我们公司做的系统时候,需要检查插件是否存在。
首先让我们来看看这一段的脚本。
function isExistOffice(){ try{ var shell = new ActiveXObject("WScript.Shell"); var key = shell.RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\Installer\\Products\\94C761FF8C9CE034ABDEC7BD7E97F367\\ProductName"); var key = shell.RegRead("HKEY_LOCAL_MACHINE"); alert(key); if(key.indexOf('<%=CTBRIConfig.ATTACH_NAME%>')!=-1){ return true; } }catch(e){ return false; } return false; }
这段脚本就是检查控制是否存在,通过调用ActiveXObject来读取注册表。
安装程序安装没有任何问题,在注册表中也可以看到此键值是存在的,进入的时候,总是返回为false,通过反复调试,确认是shell.RegRead,没有读取到注册表中的键值,报错的信息是“invalid root in registry key...”,regedit进入到注册表中,发现键值存在。
突然想到,此activexobject可能读取的不是64位的,通过regedit32进入,查看,果然没有此键值,加入,再测试OK。
总结:在windows 64位系统中,往往是存在着32位与64位,如果确认64位没有问题,可能程序读取的是32位的环境的,请检查32位的。
BTW:在linux中也可能会有这个情况,lib、lib64,一个是32位的,一个是64位,pidgin 中的飞信加入,也要注意这个问题。