/** * Constructs a <tt>RegistryUninstallerListener</tt>. * * @param handler the handler * @param resources the resources * @param messages the messages */ public RegistryUninstallerListener( RegistryDefaultHandler handler, Resources resources, Messages messages) { System.out.println("Cleaning the windows registry"); this.handler = handler.getInstance(); this.resources = resources; this.messages = messages; }
/** * Invoked before files are deleted. * * @param files all files which should be deleted * @throws IzPackException for any error */ @Override public void beforeDelete(List<File> files) { if (actions == null || actions.isEmpty()) { return; } try { RegistryHandler registryHandler = handler.getInstance(); if (registryHandler == null) { return; } registryHandler.activateLogging(); registryHandler.setLoggingInfo(actions); registryHandler.rewind(); } catch (NativeLibException e) { throw new WrappedNativeLibException(e, messages); } }
/** * Returns the path to the needed JDK if found in the registry. If there are more than one JDKs * registered, that one with the highest allowd version will be returned. Works only on windows. * On Unix an empty string returns. * * @return the path to the needed JDK if found in the windows registry */ private String resolveInRegistry() { String retval = ""; int oldVal = 0; RegistryHandler registryHandler = null; badRegEntries = new HashSet<String>(); try { // Get the default registry handler. registryHandler = RegistryDefaultHandler.getInstance(); if (registryHandler == null) // We are on a os which has no registry or the // needed dll was not bound to this installation. In // both cases we forget the try to get the JDK path from registry. { return (retval); } registryHandler.verify(this.installData); oldVal = registryHandler.getRoot(); // Only for security... registryHandler.setRoot(MSWinConstants.HKEY_LOCAL_MACHINE); String[] keys = registryHandler.getSubkeys(JDK_ROOT_KEY); if (keys == null || keys.length == 0) { return (retval); } Arrays.sort(keys); int i = keys.length - 1; String min = getMinVersion(); String max = getMaxVersion(); // We search for the highest allowd version, therefore retrograde while (i > 0) { if (compareVersions( keys[i], max, false, 4, 4, "__NO_NOT_IDENTIFIER_")) { // First allowd version found, now we have to test that the // min value // also allows this version. if (compareVersions(keys[i], min, true, 4, 4, "__NO_NOT_IDENTIFIER_")) { String cv = JDK_ROOT_KEY + "\\" + keys[i]; String path = registryHandler.getValue(cv, JDK_VALUE_NAME).getStringData(); // Use it only if the path is valid. // Set the path for method pathIsValid ... pathSelectionPanel.setPath(path); if (!pathIsValid()) { badRegEntries.add(keys[i]); } else if ("".equals(retval)) { retval = path; } pathSelectionPanel.setPath(retval); } } i--; } } catch (Exception e) { // Will only be happen if registry handler is good, but an // exception at performing was thrown. This is an error... e.printStackTrace(); } finally { if (registryHandler != null && oldVal != 0) { try { registryHandler.setRoot(MSWinConstants.HKEY_LOCAL_MACHINE); } catch (NativeLibException e) { e.printStackTrace(); } } } return (retval); }