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; }
/*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; }