Пример #1
0
        public Program GetProgram(ProgramID progID, bool canAdd = false, FuzzyModes fuzzyMode = FuzzyModes.No)
        {
            Program prog = GetProgramFuzzy(Programs, progID, fuzzyMode);

            if (prog == null && canAdd)
            {
                prog = AddProgram(progID);
            }

            return(prog);
        }
Пример #2
0
        public static T GetProgramFuzzy <T>(SortedDictionary <ProgramID, T> Programs, ProgramID progID, FuzzyModes fuzzyMode) where T : class
        {
            T prog = null;

            if (Programs.TryGetValue(progID, out prog))
            {
                return(prog);
            }

            // Only works for services and apps
            if (!(progID.Type == ProgramID.Types.Service || progID.Type == ProgramID.Types.App))
            {
                return(null);
            }

            if ((fuzzyMode & FuzzyModes.Tag) != 0 && progID.Aux.Length > 0)
            {
                // first drop path and try to get by serviceTag or application SID
                ProgramID auxId = ProgramID.New(progID.Type, null, progID.Aux);
                if (Programs.TryGetValue(auxId, out prog))
                {
                    return(prog);
                }
            }

            if ((fuzzyMode & FuzzyModes.Path) != 0 && progID.Path.Length > 0 &&
                (progID.Type == ProgramID.Types.Service || progID.Type == ProgramID.Types.App) &&
                System.IO.Path.GetFileName(progID.Path).Equals("svchost.exe", StringComparison.OrdinalIgnoreCase) == false) // dont use this for svchost.exe
            {
                // than try to get an entry by path only
                ProgramID pathId = ProgramID.New(ProgramID.Types.Program, progID.Path, null);
                if (Programs.TryGetValue(pathId, out prog))
                {
                    return(prog);
                }
            }

            return(null);
        }