/// <summary>
        /// Registers the appropiate changers by itself according to the specified
        /// configuration.
        /// </summary>
        /// <param name="config">Configuration which will be used to choose the appropiate changers
        /// and to retrieve the specific information that each of them may require. Note that the presence
        /// of every "enable" is required, though they may be set to false. Generally the collection will
        /// simply be the app.config collection. Note also that the presence of additional unrelated
        /// NameValues is allowed. </param>
        public void registerPasswordChangers(NameValueCollection config)
        {
            bool en_rdp = Convert.ToBoolean(RetrieveValue(config, "enable_rdp"));
            bool en_vnc = Convert.ToBoolean(RetrieveValue(config, "enable_ultravnc"));

            if (en_rdp)
            {
                Trace.WriteLine("Building RDP password changer");
                string acc_name    = RetrieveValue(config, "rdp_acc_name");
                var    rdp_changer = new WindowsPasswordChanger(acc_name);
                PasswordChangerManager.Instance.registerPasswordChanger("rdp", rdp_changer);
            }

            if (en_vnc)
            {
                Trace.WriteLine("Building VNC password changer");
                string vnc_path    = RetrieveValue(config, "ultravnc_path");
                var    vnc_changer = new UltraVNCPasswordChanger(vnc_path);
                PasswordChangerManager.Instance.registerPasswordChanger("ultravnc", vnc_changer);
            }
        }
        /// <summary>
        /// Registers the appropiate changers by itself according to the specified
        /// configuration.
        /// </summary>
        /// <param name="config">Configuration which will be used to choose the appropiate changers 
        /// and to retrieve the specific information that each of them may require. Note that the presence
        /// of every "enable" is required, though they may be set to false. Generally the collection will
        /// simply be the app.config collection. Note also that the presence of additional unrelated 
        /// NameValues is allowed. </param>
        public void registerPasswordChangers(NameValueCollection config)
        {
            bool en_rdp = Convert.ToBoolean(RetrieveValue(config, "enable_rdp"));
            bool en_vnc = Convert.ToBoolean(RetrieveValue(config, "enable_ultravnc"));

            if (en_rdp)
            {
                Trace.WriteLine("Building RDP password changer");
                string acc_name = RetrieveValue(config, "rdp_acc_name");
                var rdp_changer = new WindowsPasswordChanger(acc_name);
                PasswordChangerManager.Instance.registerPasswordChanger("rdp", rdp_changer);
            }

            if (en_vnc)
            {
                Trace.WriteLine("Building VNC password changer");
                string vnc_path = RetrieveValue(config, "ultravnc_path");
                var vnc_changer = new UltraVNCPasswordChanger(vnc_path);
                PasswordChangerManager.Instance.registerPasswordChanger("ultravnc", vnc_changer);
            }
        }