public void run(boolean updateMode)
    {
        String buttonName = updateMode ? Language.getLocalizedString("button.update") : Language.getLocalizedString("button.install");
        JOptionPane optionPane = new JOptionPane(this, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, new String[] {buttonName, Language.getLocalizedString("button.cancel")}, "defaut");

        Frame emptyFrame = new Frame(Language.getLocalizedString("frame.install"));
        emptyFrame.setUndecorated(true);
        emptyFrame.setVisible(true);
        emptyFrame.setLocationRelativeTo(null);
        String frameName = updateMode ? Language.getLocalizedString("frame.update") : Language.getLocalizedString("frame.install");
        dialog = optionPane.createDialog(emptyFrame, frameName);
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        dialog.setVisible(true);

        String result = (String)(optionPane.getValue() != null ? optionPane.getValue() : Language.getLocalizedString("error"));
        if(result.equals(Language.getLocalizedString("button.install")) || result.equals(Language.getLocalizedString("button.update")))
        {
            InstallerAction action = InstallerAction.CLIENT;
            if(action.run(targetDir, updateMode))
            {
                JOptionPane.showMessageDialog(null, action.getSuccessMessage(), Language.getLocalizedString("complete"), JOptionPane.INFORMATION_MESSAGE);
            }
        }
        dialog.dispose();
        emptyFrame.dispose();
    }