/// <summary>
        ///     Loads registry sub key into tree view
        /// </summary>
        /// <remarks>Do NOT close the registry key after use!</remarks>
        private static void LoadRegistryAutoRun(StartupMgrModel treeModel, RegistryKey regKey)
        {
            if (regKey == null)
            {
                return;
            }

            if (regKey.ValueCount <= 0)
            {
                return;
            }

            string[] valueNames;
            var      bitmap = regKey.Name.Contains(Registry.CurrentUser.ToString())
                ? Resources.current_user
                : Resources.all_users;

            var nodeRoot = new StartupEntry
            {
                SectionName = regKey.Name,
                BitmapImg   = bitmap.CreateBitmapSourceFromBitmap()
            };

            try
            {
                valueNames = regKey.GetValueNames();
            }
            catch (Exception ex)
            {
                Debug.WriteLine("The following error occurred: " + ex.Message + "\nUnable to get value names for " +
                                regKey);
                return;
            }

            foreach (var item in valueNames)
            {
                try
                {
                    var filePath = regKey.GetValue(item) as string;

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

                    // Get file arguments
                    string file, args = "";

                    if (Utils.FileExists(filePath))
                    {
                        file = filePath;
                    }
                    else
                    {
                        if (!Utils.ExtractArguments(filePath, out file, out args))
                        {
                            if (!Utils.ExtractArguments2(filePath, out file, out args))
                            {
                                // If command line cannot be extracted, set file path to command line
                                file = filePath;
                            }
                        }
                    }

                    var node = new StartupEntry
                    {
                        Parent      = nodeRoot,
                        SectionName = item,
                        Path        = file,
                        Args        = args,
                        RegKey      = regKey
                    };

                    var ico = Utils.ExtractIcon(file);
                    node.BitmapImg = ico != null
                        ? (ico.ToBitmap().Clone() as Bitmap).CreateBitmapSourceFromBitmap()
                        : Resources.appinfo.ToBitmap().CreateBitmapSourceFromBitmap();

                    nodeRoot.Children.Add(node);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("The following error occurred: " + ex.Message +
                                    "\nSkipping trying to get value for " + item + " in " + regKey + "...");
                }
            }

            if (nodeRoot.Children.Count > 0)
            {
                treeModel.Root.Children.Add(nodeRoot);
            }
        }
        /// <summary>
        ///     Loads startup folder into tree view
        /// </summary>
        private static void AddStartupFolder(StartupMgrModel treeModel, string folder)
        {
            if (string.IsNullOrEmpty(folder) || !Directory.Exists(folder))
            {
                return;
            }

            string[] shortcutList;
            var      bitmap = Utils.GetSpecialFolderPath(PInvoke.CsidlStartup) == folder
                ? Resources.current_user
                : Resources.all_users;
            var nodeRoot = new StartupEntry
            {
                SectionName = folder,
                BitmapImg   = bitmap.CreateBitmapSourceFromBitmap()
            };

            try
            {
                shortcutList = Directory.GetFiles(folder);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("The following error occurred: " + ex.Message + "\nUnable to get files in " + folder);
                return;
            }

            foreach (var shortcut in shortcutList)
            {
                try
                {
                    var shortcutName = Path.GetFileName(shortcut);

                    if (Path.GetExtension(shortcut) != ".lnk")
                    {
                        continue;
                    }

                    string filePath, fileArgs;

                    if (!Utils.ResolveShortcut(shortcut, out filePath, out fileArgs))
                    {
                        continue;
                    }

                    var node = new StartupEntry
                    {
                        Parent      = nodeRoot,
                        SectionName = shortcutName,
                        Path        = filePath,
                        Args        = fileArgs
                    };

                    var ico = Utils.ExtractIcon(filePath);
                    node.BitmapImg = ico != null
                        ? (ico.ToBitmap().Clone() as Bitmap).CreateBitmapSourceFromBitmap()
                        : Resources.appinfo.ToBitmap().CreateBitmapSourceFromBitmap();

                    nodeRoot.Children.Add(node);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("The following error occurred: " + ex.Message +
                                    "\nSkipping trying to resolve shortcut for " + shortcut);
                }
            }

            if (nodeRoot.Children.Count > 0)
            {
                treeModel.Root.Children.Add(nodeRoot);
            }
        }
 public StartupMgrModel()
 {
     Root = new StartupEntry();
 }