Windows Server 2003(32位)terminal服务上的Java RE 1.7.0的问题?

最近,我在我们的Windows 2003terminal服务之一上执行更新。 在更新过程中,我卸载了所有以前的Java RE版本,并使用“添加/删除程序”(用于terminal服务安装模式)在pipe理员login下重新安装了Java RE 1.7.0。 在安装1.7.0之后,即使在其“高级Internet Explorer 8 Internet选项”页面中选中“使用JRE 1.7.0_5(需要重新启动)”,RDP客户端仍然无法运行Java。

即使具有不是用于安装的帐户的pipe理员权限的帐户也无法使用Java RE 1.7.0。

使用(设置为“可信站点”来确保安全设置被降低)进行testing:

  • http://javatester.org/version.html
  • http://www.java.com/en/download/installed.jsp?detect=jre&try=1

为了testing这个,我继续开发了几个我的Windows 2003虚拟机,它们的组策略和terminal服务设置是以类似的方式进行testing的。 其他两个虚拟机的行为完全相同,使除安装用户以外的任何用户都无法使用Java RE 1.7.0。

在testing过程中,我继续做了以下工作:

  1. 卸载Java RE 1.7.0
  2. 重新启动
  3. 在pipe理员帐户下使用相同的“添加/删除程序”方法安装Java RE 1.6 Update 33
  4. 重新启动
  5. RDP作为标准用户join到机器中,并testingJava RE,并完美运行

我想在Java RE 1.7.0中有一些东西在Windows Server 2003下没有正确安装terminal服务。但是,我发现真的很奇怪,我没有发现有人在网上提到这个。

在用Sysinternals Procmon.exe进行了很多跟踪之后,我发现Installed Console用户和RDP用户之间的注册表键有特定的区别。

HKCU\Software\Classes\CLSID\{CAFEEFAC-0017-0000-0005-ABCDEFFEDCBB}\ HKCU\Software\Classes\CLSID\{CAFEEFAC-0017-0000-0005-ABCDEFFEDCBB}\Inprocserver32

这些密钥存在于功能正常的用户,但是RDP用户帐户缺失。 所以我第一次尝试简单地导入此密钥到RDP用户,这对特定的用户帐户的工作。 但是,我希望所有的用户都能够正常工作,因此我将密钥修改为HKLM(HKEY_LOCAL_MACHINE),然后导入密钥。 这解决了所有用户的Java RE 1.7.0问题。

在我的情况下,Java RE安装到D:\ Program Files \ Java \ Jre7 \中,您将不得不根据您的安装路径修改注册表项。

 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{CAFEEFAC-0017-0000-0005-ABCDEFFEDCBB}] @="Java Plug-in 1.7.0_05" [HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{CAFEEFAC-0017-0000-0005-ABCDEFFEDCBB}\Inprocserver32] @="D:\\Program Files\\Java\\jre7\\bin\\jp2iexp.dll" "ThreadingModel"="Apartment"