经常遇到这样的情况,JDK和JRE众所周知是绿色的。正如JAVA命令一般,无论JDK装在哪里,只要在正确的路径下键入JAVA,JAVAW,JAVAC一类命令都将会正确的运行。虽然JDK装在非系统盘的逻辑分区,但是每当重做系统之后,JAR文件双击打开,IE查看APPLET,JAVA WEB START的正常开启,都会失去正常功能。可以猜想到是注册表中失去了一些什么才造成了这样的状况。这篇文章主要用来告诉大家如何在重做系统后回复这些JAVA与WINDOWS的接口功能。
A.回复IE的APPLET功能(java plugin)
1.拷贝%JAVA_HOME%/BIN下的javacpl.cpl到%System32%目录;
2.在注册表下建立:
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_10]
"MicroVersion"="1"
"RuntimeLib"="D:\\Software\\jdk6\\jre\\bin\\client\\jvm.dll"
"JavaHome"="D:\\Software\\jdk6\\jre"
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Plug-in\1.6.0_10]
"UseJava2IExplorer"=dword:00000001
"JavaHome"="D:\\Software\\jdk6\\jre"
"HideSystemTrayIcon"=dword:00000000
保证控制面板里的java plugin双击能够运行。
3、注册NPJPI141_02.dll,在命令行输入 regsvr32 D:\Software\jdk6\jre\bin\NPJPI160_10.dll 保证NPJPI160_10.dll 注册成功。
NPJPI*.dll 是一个COM组件,包含三个COM对象,分别为Java Plug-in <applet> 转向器 和相应Java Runtime Environment链接器,classid分别为8AD9C840-044E-11D1-B3E9-00805F499D93,CAFEEFAC-0014-0001-0002-ABCDEFFEDCBA,CAFEEFAC-0014-0001-0002-ABCDEFFEDCBB
它同通过提供一组com接口使得ie在浏览带有applet的页面时,原来是通过微软的java虚拟机(在system32目录的一个msjava.dll文件),重新转向到sun 的jre环境。
4.因为NPJPI141_02.dll的注册过程,在注册表的相应位置没有正确的设置(NPJPI141_02.dll在注册表的注册文件名为NPJAVA141_02.dll,这可就是最大的错误),所以最后还要手动的修改注册表。都是文件名称错误,修改NPJPI141_02.dll包含的三个com对象指向正确的文件名。简便的方法是将下边的注册表脚本中npjpi*.dll的路径改为正确的路径,然后插入注册表.下边的段落可以粘贴到记事本,然后更改扩展名为.reg,双击执行。注意修改其中路径。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{8AD9C840-044E-11D1-B3E9-00805F499D93}]
[HKEY_CLASSES_ROOT\CLSID\{8AD9C840-044E-11D1-B3E9-00805F499D93}\InprocServer32]
@="D:\\Software\\jdk6\\jre\\bin\\npjpi160_10.dll"
[HKEY_CLASSES_ROOT\CLSID\{8AD9C840-044E-11D1-B3E9-00805F499D93}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8AD9C840-044E-11D1-B3E9-00805F499D93}\InprocServer32]
@="D:\\Software\\jdk6\\jre\\bin\\npjpi160_10.dll"
[HKEY_CLASSES_ROOT\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBA}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBA}\InprocServer32]
@="D:\\Software\\jdk6\\jre\\bin\\npjpi160_10.dll"
[HKEY_CLASSES_ROOT\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBA}]
[HKEY_CLASSES_ROOT\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBA}\InprocServer32]
@="D:\\Software\\jdk6\\jre\\bin\\npjpi160_10.dll"
[HKEY_CLASSES_ROOT\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBA}]
[HKEY_CLASSES_ROOT\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBB}\InprocServer32]
@="D:\\Software\\jdk6\\jre\\bin\\npjpi160_10.dll"
[HKEY_CLASSES_ROOT\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBA}]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBB}\InprocServer32]
@="D:\\Software\\jdk6\\jre\\bin\\npjpi160_10.dll"
5.修改msjava.dll转向SUN 的JRE环境。可将下边内容粘贴为.reg文件双击执行。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{08B0E5C0-4FCB-11CF-AAA5-00401C608501}\TreatAs]
@="{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBB}"
classid为08B0E5C0-4FCB-11CF-AAA5-00401C608501的com对象被包含在msjava.dll里。是ms java 虚拟机的一部分。
6.最后一步可做可不做,没有的话好像也可以运行。可将下边内容粘贴为.reg文件双击执行。注意更改路径。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\{08B0E5C0-4FCB-11CF-AAA5-00401C608500}]
"KeyFileName"="D:\\Software\\jdk6\\jre\\bin\\ActPanel.dll"
运行控制面板里的java plugin程序,进行设定,发现ie的选项里详细设定也有了用sun 虚拟机代替ms 的虚拟机的选项。
7.在控制面板的java plugin程序中进行设定。让IE使用SUN 的JAVA PLUGIN ,开启控制台,系统托盘JAVA图标等操作。
OK,java plugin 安装完成。有有兴趣的朋友可以考虑根据做成WIN32程序,帮助有这种需要的人。
我把它做成了一个批处理jdk6_reg.bat内容如下:
@echo -------------step1----------------
@echo 注意这里需要设置要根据情况修改为将要被注册的JDK目录
set java_home=D:\app.java\jdk6
copy %java_home%\jre\bin\javacpl.cpl %windir%\system32
reg add "HKEY_USERS\S-1-5-21-1229272821-1965331169-725345543-1003\Environment" /v java_home /t reg_sz /d %java_home% /f
reg add "HKEY_USERS\S-1-5-21-1229272821-1965331169-725345543-1003\Environment" /v path /t reg_expand_sz /d %java_home%\bin\; /f
@echo -------------step2----------------
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_10" /v MicroVersion /t reg_dword /d 1 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_10" /v RuntimeLib /t reg_sz /d D /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_10" /v JavaHome /t reg_sz /d %java_home%\jre /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Plug-in\1.6.0_10" /v UseJava2IExplorer /t reg_dword /d 00000001 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Plug-in\1.6.0_10" /v JavaHome /t reg_sz /d %java_home%\jre /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Plug-in\1.6.0_10" /v HideSystemTrayIcon /t reg_dword /d 00000000 /f
@echo -------------step3----------------
regsvr32 %java_home%\jre\bin\NPJPI160_10.dll /s
@echo -------------step4----------------
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8AD9C840-044E-11D1-B3E9-00805F499D93}\InprocServer32" /v @ /t reg_sz /d %java_home%\jre\bin\npjpi160_10.dll /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBA}\InprocServer32" /v @ /t reg_sz /d %java_home%\jre\bin\npjpi160_10.dll /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBB}\InprocServer32" /v @ /t reg_sz /d %java_home%\jre\bin\npjpi160_10.dll /f
reg add "HKEY_CLASSES_ROOT\CLSID\{8AD9C840-044E-11D1-B3E9-00805F499D93}\InprocServer32" /v @ /t reg_sz /d %java_home%\jre\bin\npjpi160_10.dll /f
reg add "HKEY_CLASSES_ROOT\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBA}\InprocServer32" /v @ /t reg_sz /d %java_home%\jre\bin\npjpi160_10.dll /f
reg add "HKEY_CLASSES_ROOT\CLSID\{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBB}\InprocServer32" /v @ /t reg_sz /d %java_home%\jre\bin\npjpi160_10.dll /f
@echo -------------step5----------------
reg add "HKEY_CLASSES_ROOT\CLSID\{08B0E5C0-4FCB-11CF-AAA5-00401C608501}\TreatAs" /v @ /t reg_sz /d "{CAFEEFAC-0014-0001-0002-ABCDEFFEDCBB}" /f
@echo -------------step5----------------
javacpl.cpl
@echo -------------step finish------------
pause
(1.这个批处理运行之前,先要编辑JAVA_HOME为JDK6所在路径;
2.注册完成后,弹出JAVA配置面板,把里边对IE应用JAVA插件的选项,去掉勾确认,再勾上确认。当然也可将来从控制面板进行配置。
3.运行之后,需要注销用户再登录进去,然后再控制台输入JAVA即可发现JAVA,javac,javaw等命令已经可以使用了。)
B.恢复jar文件的双击运行
待续。。。
C.恢复jnlp的WEB打开功能
待续。。。
=======================
@echo 注意这里获取bat文件运行时目录
@echo offsetlocal EnableDelayedExpansionecho
当前正在运行的批处理文件所在路径:!cd!
@echo off
set java_home=%cd%\jdk
echo java_home目录是:%java_home%
copy %java_home%\jre\bin\javacpl.cpl %windir%\system32