예제 #1
0
        private List<ApplicationInfo> generateAppListRecursing(DirectoryInfo directory)
        {
            _logger.Debug("Scanning directory {0}", directory.FullName);
            List<ApplicationInfo> rval = new List<ApplicationInfo>();
            
            foreach (DirectoryInfo subfolder in directory.GetDirectories())
            {
                rval.AddRange(generateAppListRecursing(subfolder));
            }
            
            foreach (FileInfo file in directory.GetFiles()) 
            {
                _logger.Debug("Interrogating file {0}", file.FullName);
                ApplicationInfo ai = new ApplicationInfo();
                String ext = Path.GetExtension(file.FullName);

                if (executableExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase)) {
                    try
                    {
                        ai.Name = Path.GetFileNameWithoutExtension(file.FullName);
                        ai.Path = file.FullName;
                        string target = string.Empty;

                        if (file.Extension.Equals(".lnk", StringComparison.OrdinalIgnoreCase))
                        {
                            _logger.Debug("Attempting to interrogate shortcut to application: {0}", file.FullName);
                            Interop.Shell.Link link = new Interop.Shell.Link(file.FullName);
                            target = link.Target;
                        }
                        else
                        {
                            target = file.FullName;
                        }
                        
                        if (!executableExtensions.Contains(Path.GetExtension(target), StringComparer.OrdinalIgnoreCase))
                        {
                            System.Diagnostics.Debug.WriteLine(file.Name + ": " + target);
                            continue;
                        }

                        _logger.Debug("Attempting to get associated icon for {0}", file.FullName);
                        ai.Icon = ai.GetAssociatedIcon();
                        rval.Add(ai);
                    }
                    catch (Exception ex)
                    {
                        //Output the reason to the debugger
                        _logger.Debug("Error creating ApplicationInfo object in appgrabber. Details: {0}\n{1}", ex.Message, ex.StackTrace);
                    }
                }
            }

            return rval;
        }
예제 #2
0
        /*private List<ApplicationInfo> generateAppListRecursing(DirectoryInfo directory)
        {
            List<ApplicationInfo> rval = new List<ApplicationInfo>();

            foreach (DirectoryInfo subfolder in directory.GetDirectories())
            {
                rval.AddRange(generateAppListRecursing(subfolder));
            }

            foreach (FileInfo file in directory.GetFiles())
            {
                ApplicationInfo ai = new ApplicationInfo();
                String ext = Path.GetExtension(file.FullName);

                if (executableExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase))
                {
                    try
                    {
                        ai.Name = Path.GetFileNameWithoutExtension(file.FullName);
                        ai.Path = file.FullName;
                        string target = string.Empty;

                        if (file.Extension.Equals(".lnk", StringComparison.OrdinalIgnoreCase))
                        {
                            Interop.Shell.Link link = new Interop.Shell.Link(file.FullName);
                            target = link.Target;
                        }
                        else
                        {
                            target = file.FullName;
                        }

                        // remove items that we can't execute. also remove uninstallers
                        if (!executableExtensions.Contains(Path.GetExtension(target), StringComparer.OrdinalIgnoreCase) || ai.Name == "Uninstall" || ai.Name.StartsWith("Uninstall "))
                        {
                            System.Diagnostics.Debug.WriteLine("Not an app: " + file.Name + ": " + target);
                            continue;
                        }

                        ai.Icon = ai.GetAssociatedIcon();
                        rval.Add(ai);
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine("Error creating ApplicationInfo object in appgrabber. " + ex.Message);
                    }
                }
            }

            return rval;
        }*/
        private List<ApplicationInfo> generateAppList(string directory)
        {
            List<ApplicationInfo> rval = new List<ApplicationInfo>();

            foreach (string file in Directory.EnumerateFiles(directory, "*", SearchOption.AllDirectories))
            {
                ApplicationInfo ai = new ApplicationInfo();
                String ext = Path.GetExtension(file);

                if (executableExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase))
                {
                    try
                    {
                        ai.Name = Path.GetFileNameWithoutExtension(file);
                        ai.Path = file;
                        string target = string.Empty;
                        string fileExt = Path.GetExtension(file);

                        if (fileExt.Equals(".lnk", StringComparison.OrdinalIgnoreCase))
                        {
                            Interop.Shell.Link link = new Interop.Shell.Link(file);
                            target = link.Target;
                        }
                        else
                        {
                            target = file;
                        }

                        // remove items that we can't execute. also remove uninstallers
                        if (!executableExtensions.Contains(Path.GetExtension(target), StringComparer.OrdinalIgnoreCase) || ai.Name == "Uninstall" || ai.Name.StartsWith("Uninstall "))
                        {
                            System.Diagnostics.Debug.WriteLine("Not an app: " + file + ": " + target);
                            continue;
                        }

                        ai.Icon = ai.GetAssociatedIcon();
                        rval.Add(ai);
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine("Error creating ApplicationInfo object in appgrabber. " + ex.Message);
                    }
                }
            }

            return rval;
        }