JDK-6485081 : java control panel needs a manifest
  • Type: Bug
  • Component: install
  • Sub-Component: install
  • Affected Version: 6
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2006-10-23
  • Updated: 2011-02-17
  • Resolved: 2011-02-16
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
6u4Fixed 7 b64Fixed
Related Reports
Relates :  
Relates :  
Steps to reproduce:

1. Install the latest Java 6 JRE on a recent Vista build.  
2. Launch the Java Control Panel.
3. Close the Java Control Panel.

You will be asked if the controlpanel worked correctly.  This dialog should not show.  The reason it is showing is because we do not have a manifest associated with our java control panel.  Our JCP needs this because it needs administrative privileges to run.  See this url for more info:


EVALUATION currently all binary files have signature and manifest

EVALUATION The fix for this (uncverified) was delivered into JDK7 b64 as part of: 6797688: Umbrella: Merge all JDK 6u4 - 6u12 deployment code into JDK7

SUGGESTED FIX We just need to change the logic in RegInstall.cpp, function InstallJavaControlPanel and UninstallJavaControlPanel, to perform the new registry key value registration, as indicated above. There is no need to copy javacpl.cpl to system32 directory anymore on vista platform. The above registry will do the trick instead.

SUGGESTED FIX http://msdn2.microsoft.com/en-US/library/aa905328.aspx add the following registry key during install time: Create a new GUID for Java Control Panel using GUIDGEN. Create the key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\{GUID} and set Default Value = "Java" Create key: HKEY_CLASSES_ROOT\CLSID\{GUID}, and set following values under it: (Default value) as REG_SZ = "Java" // put java control panel in program category System.ControlPanel.Category as Reg_sz = "8" Set the command with HKEY_CLASSES_ROOT\CLSID\{GUID}\Shell\Open\Command: reg_expand_sz = "%ProgramFiles%\java\jre1.6.0_03\bin\javacpl.exe" Set the Icon with HKEY_CLASSES_ROOT\CLSID\{GUID}\DefaultIcon: reg_expand_sz = "%ProgramFiles%\java\jre1.6.0_03\bin\javacpl.exe" Add a "asInvoker" manifest to javacpl.exe That should do it. The above should only happen during install on vista platform. For uninstall, on vista, if there is previous JRE exists, we should hook up the previous JRE javacpl.exe too, using the above registry keys.

EVALUATION this document suggests a way to use a .exe file instead of a .cpl on vista: http://msdn2.microsoft.com/en-US/library/aa905328.aspx

SUGGESTED FIX manifests cannot be applied to .cpl file. In the following document: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/AppComp.asp, under User Account Control, remedies, it says: "Control panel applications must move away from .cpl files to .exe files, and include a manifest for their EXE-based control panel applications that specifies the execution level required." We use this .cpl file to have the Windows Control panel find our Java control panel and show the icon in the windows control panel list. We are still waiting from MSFT for how to accomplish the same (show icon in windows control panel) with EXE based control panel application.

EVALUATION For the Program Compatibility Assistant (PCA) dialog that pops up after Java Control Panel (JCP) exit, there are 3 possible button you can click on this dialog: 1. Cancel - this PCA dialog will come up again next time you exit JCP. 2. This control panel works correctly - this PCA dialog won't come up anymore. No settings will be changed on how JCP should be launch. 3. Open the control panel using recommended settings - if you click this, you will get the "Run legacy CPL as elevated" window every time you launch JCP, and you will always launch JCP as admin. So this one is not good for us. Once you click "3" above, the settings will be persisted, and the only way to undo it is to remove these registry values for javacpl.cpl (Java 6*) or jpicpl32.cpl (Java 5*) (that's what I found so far): HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\AppCompatFlags\Compatiblity Assistant\Persisted HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers These registry values are documented here: See section "Managing Settings Made by PCA": http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/AppComp.asp

EVALUATION need to add manifest