public RarPasswordViewModel(CorruptedRarOrMissingPasswordArgs iCorruptedRarOrMissingPasswordArgs)
        {
            _CorruptedRarOrMissingPasswordArgs = iCorruptedRarOrMissingPasswordArgs;
            _SavePassword = _CorruptedRarOrMissingPasswordArgs.SavePassword;
            _Who = _CorruptedRarOrMissingPasswordArgs.Who;
            _What = _CorruptedRarOrMissingPasswordArgs.What;

            OK = RelayCommand.Instanciate(() => { 
                _CorruptedRarOrMissingPasswordArgs.accept = !string.IsNullOrEmpty(Password); 
                _CorruptedRarOrMissingPasswordArgs.Password = Password;
                _CorruptedRarOrMissingPasswordArgs.SavePassword = SavePassword;
                Window.Close(); });

            Cancel = RelayCommand.Instanciate(() =>{ _CorruptedRarOrMissingPasswordArgs.accept = false; Window.Close();});
        }
        private bool OnErrorUserExit(IEventListener iel,CorruptedRarOrMissingPasswordArgs cr)
        {
            iel.Report(cr);
            if ((cr.accept) && (cr.SavePassword))
               _IUnrarUserSettings. AddPassword(cr.Password);

            if (_AddRar!=cr.SavePassword)
            {
                 _IUnrarUserSettings.AddUseRarPasswordToList = cr.SavePassword;
                _AddRar = cr.SavePassword;
                return true;
            }

            return false;
        }
        private SevenZipExtractor InstanciateZipExctractorWithPassword(string FileName, IEventListener iel)
        {
            SevenZipExtractor Sex = new SevenZipExtractor(FileName);

            bool valid = Sex.Check();

            if (valid == false)
            {
                Sex.Dispose();

                foreach (string psw in _IUnrarUserSettings.EnumerableRarPasswords)
                {                     
                      Sex = new SevenZipExtractor(FileName, psw);
                      if (Sex.Check())
                      {
                          Trace.WriteLine(string.Format("Find Password in list: {0}", psw));
                          return Sex;
                      }
                      else
                        Sex.Dispose();
                }

                string same = Path.GetFileName(FileName);
                CorruptedRarOrMissingPasswordArgs cr = new CorruptedRarOrMissingPasswordArgs(same, _AddRar);

                OnErrorUserExit(iel, cr);

                while ((!valid) && (cr.accept == true))
                {                      
                    Sex = new SevenZipExtractor(FileName, cr.Password);

                    valid = Sex.Check();
                    if (valid == false)
                    {
                        Sex.Dispose();
                        cr = new CorruptedRarOrMissingPasswordArgs(same, cr.SavePassword);

                        OnErrorUserExit(iel, cr);
                    } 
                }

                if (valid == false)
                    return null;
               
            }

            return Sex;
        }