Exemple #1
0
        private void RemoveApplications(object sender, DoWorkEventArgs e)
        {
            var bgWorker = (BackgroundWorker)sender;

            bgWorker.ReportProgress(1, String.Format("Remove Applications."));

            foreach (var app in _applications.Where(x => x.Selected))
            {
                var exists = _catalog.Applications.TryExists(app.Name);

                if (exists)
                {
                    var s = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

                    var sp  = s + "\\BTFGui\\Binding Files\\";
                    var spp = sp + app.Name + string.Format(".{0:yyyy-MM-dd_HH-mm-ss}", DateTime.Now) +
                              ".BindingInfo.xml";
                    _catalog.Applications[app.Name].ExportBinding(spp, true);

                    bgWorker.ReportProgress(1, String.Format("Binding for Application '{0}' Exported to '{1}'.", app.Name, spp));
                }
            }

            var loop = true;

            while (loop)
            {
                foreach (var app in _applications.Where(x => x.Selected))
                {
                    var exists = _catalog.Applications.TryExists(app.Name);

                    if (exists)
                    {
                        bgWorker.ReportProgress(1, String.Format("Removing Application '{0}'...", app.Name));

                        try
                        {
                            _catalog.RemoveApplication(app.Name, true);
                            bgWorker.ReportProgress(1, String.Format("Application '{0}' Removed.", app.Name));
                        }
                        catch (Exception ex)
                        {
                            if (ex.InnerException.Message == "Failed to delete resource(s).")
                            {
                                bgWorker.ReportProgress(1,
                                                        String.Format(
                                                            "Application '{0}' is referenced by other applications, will retry later.", app.Name));

                                // possible endless loop!!!
                                // should check for references and retry only 3 times
                                // stupid to try to delete the generic applications...
                            }
                            else
                            {
                                throw ex;
                            }
                        }
                    }
                }

                if (!_catalog.Applications.Select(s => s.Name).Intersect(_applications.Select(x => x.Name)).Any())
                {
                    loop = false;
                }
            }

            _catalog.SaveChanges();
            _catalog.Refresh();

            bgWorker.ReportProgress(100, "Applications Removed.");
        }