private static void startLauncher(URL url, String os, String arch, String arg)
	{
		System.out.println("startLauncher()");
		try
		{
			// Reload new policy which allows all to all codebases
			// because the default policy doesn't apply to the code loaded from
			// startup.jar!!!
			Policy.setPolicy(new AllPermissionPolicy());

			final String path = url + getSystemProperty(LAUNCHER_JAR);
			System.out.println("launcher jar: " + path);

			URLClassLoader classLoader = new URLClassLoader(new URL[] { new URL(path) });
			Class<?> launcher = classLoader.loadClass(LAUNCHER_CLASS);
			Method launcherMain = launcher.getMethod("main", new Class[] { String.class });

			/*
			 * Start launcher with aurguments -os <operating-system> -ws
			 * <window-system> -arch <system architecture> -install
			 * <installation directory> -data <workspace directory> -user
			 * <workspace directory> -nl <locale> <-application|product name>
			 * The default workspace directory is put under the installation
			 * directory.
			 */
			launcherMain.invoke(
			        null,
			        new Object[] { "-os " + os + " -ws " + getWindowSystem(os) + " -arch " + arch + " -install " + url
			                + " -data " + url + "/workspace/ -user " + url + "/workspace/ -nl " + Locale.getDefault()
			                + arg });
		}
		catch(InvocationTargetException ex)
		{
			handleError("Startup Error", "Invocation failed: " + ex.getCause());
		}
		catch(IllegalAccessException ex)
		{
			handleError("Startup Error", "Invocation failed: " + ex);
		}
		catch(NoSuchMethodException ex)
		{
			ex.printStackTrace();
			handleError("Startup Error", "Invalid Eclipse Launcher: " + ex);
		}
		catch(ClassNotFoundException ex)
		{
			ex.printStackTrace();
			handleError("Startup Error", "Eclipse Launcher not found: " + ex);
		}
		catch(MalformedURLException ex)
		{
			// This shouldn't happen.
			throw new RuntimeException(ex);
		}
	}