public void Subscribe(Action <CreatedProcessDescriptor> handler, SCG.IEnumerable <string> names, bool retroactive)
        {
            var lowerCaseNames = new ItzWarty.Collections.HashSet <string>(names.Select(FormatProcessName));

            foreach (var lowerCaseName in lowerCaseNames)
            {
                processSpawnedHandlersByProcessName.Add(lowerCaseName, handler);
            }

            if (retroactive)
            {
                var processes = processWatcher.FindProcess((p) => lowerCaseNames.Contains(FormatProcessName(p.ProcessName)));
                foreach (var process in processes)
                {
                    handler(new CreatedProcessDescriptor(process.ProcessName, process.Id, processProxy.GetParentProcess(process).Id));
                }
            }
        }