private void ProcessFiles(ICollection <string> files)
        {
            if (files == null || files.Count < 1)
            {
                return;
            }

            var folders = new List <string>();

            foreach (var file in files)
            {
                var fname = file;

                if (string.IsNullOrEmpty(fname))
                {
                    continue;
                }

RewindDropLoop:

                if (Directory.Exists(fname))
                {
                    folders.Add(fname);
                    continue;
                }

                if (!File.Exists(fname))
                {
                    try
                    {
                        fname = ProcessTools.SeparateArgsFromCommand(file).FileName;

                        if (Directory.Exists(fname))
                        {
                            folders.Add(fname);
                            continue;
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex);
                    }
                }

                if (fname.TrimEnd().EndsWith(".lnk", StringComparison.OrdinalIgnoreCase))
                {
                    try
                    {
                        var result = WindowsTools.ResolveShortcut(fname);
                        if (result != null)
                        {
                            fname = result;
                            goto RewindDropLoop;
                        }
                    }
                    catch (Exception ex)
                    {
                        PremadeDialogs.GenericError(ex);
                    }
                }
                else
                {
                    try
                    {
                        var dirName = Path.GetDirectoryName(fname);
                        folders.Add(dirName);
                    }
                    catch (Exception ex)
                    {
                        PremadeDialogs.GenericError(ex);
                    }
                }
            }

            var distinctFolders = folders.Where(x => x != null)
                                  .Select(x => x.Normalize().ToLowerInvariant().Trim().Trim('\'', '"').Trim())
                                  .Distinct();

            var folderInfos = distinctFolders.Select(x =>
            {
                try
                {
                    return(new DirectoryInfo(x));
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                    return(null);
                }
            }).Where(x => x != null);

            var results = folderInfos.Where(x => !UninstallToolsGlobalConfig.IsSystemDirectory(x)).ToList();

            DirectoriesSelected?.Invoke(this, new DirectoriesSelectedEventArgs(results));
        }
Beispiel #2
0
 protected virtual void OnDirectoriesSelected(DirectoriesSelectedEventArgs e)
 {
     DialogResult = DialogResult.OK;
     Close();
     DirectoriesSelected?.Invoke(this, e);
 }