Exemple #1
0
        private bool IsMatch(AttachDescriptor descriptor, Process process)
        {
            var rtn = IsProcessMatch(descriptor, process) &&
                      IsUsernameMatch(descriptor, process) &&
                      IsAppPoolMatch(descriptor, process);

            return(rtn);
        }
Exemple #2
0
        protected bool IsProcessMatch(AttachDescriptor descriptor, Process process)
        {
            if (descriptor.ProcessNames.Any() == false)
            {
                return(true);
            }

            return(descriptor.IsProcessNamesRegex
                                ? descriptor.ProcessNameRegexes.Any(rgx => rgx.IsMatch(process.Name))
                                : descriptor.ProcessNames.Any(name => process.Name.EndsWith(name, StringComparison.OrdinalIgnoreCase)));
        }
Exemple #3
0
        protected bool IsUsernameMatch(AttachDescriptor descriptor, Process process)
        {
            if (string.IsNullOrEmpty(descriptor.Username))
            {
                return(true);
            }

            var procOwner = process.GetProcessUser();

            if (procOwner == null)
            {
                return(true);
            }

            return(descriptor.IsProcessNamesRegex
                                ? descriptor.UsernameRegex.IsMatch(procOwner)
                                : procOwner.EndsWith(descriptor.Username, StringComparison.OrdinalIgnoreCase));
        }
Exemple #4
0
        private void AddAttachCommand(IMenuCommandService mcs, int commandId, AttachDescriptor descriptor)
        {
            if (mcs == null)
            {
                return;
            }

            var commandIdentifier = new CommandID(ATAGuids.guidAnotherAttachToAnyCmdGroup, commandId);
            var existing          = mcs.FindCommand(commandIdentifier);

            if (existing != null)
            {
                ((DescriptorMenuCommand)existing).Descriptor = descriptor;
                return;
            }
            var menuItem = new DescriptorMenuCommand(MenuCommandInvokeHandler, commandId, descriptor);

            mcs.AddCommand(menuItem);
        }
Exemple #5
0
        protected bool IsAppPoolMatch(AttachDescriptor descriptor, Process process)
        {
            if (string.IsNullOrEmpty(descriptor.AppPool))
            {
                return(true);
            }

            if (process.IsIISWorkerProcess() == false)
            {
                // not IIS
                return(true);
            }

            var appPoolName = process.GetAppPoolName();

            if (appPoolName == null)
            {
                return(false);
            }

            return(descriptor.IsAppPoolRegex
                                ? descriptor.AppPoolRegex.IsMatch(appPoolName)
                                : appPoolName.EndsWith(descriptor.AppPool, StringComparison.OrdinalIgnoreCase));
        }
Exemple #6
0
        // based on information from : https://github.com/hesam/SketchSharp/blob/master/SpecSharp/SpecSharp/Microsoft.VisualStudio.Shell/DialogPage.cs
        public override void LoadSettingsFromXml(IVsSettingsReader reader)
        {
            int multiMatch;

            reader.ReadSettingLong(ATASettings.Keys.AttachDescriptorDefaultMultipleMatchHandling, out multiMatch);
            MultipleMatchHandlingDefault = multiMatch == 0 ? MultiMatchOptionsGlobal.All: (MultiMatchOptionsGlobal)multiMatch;

            var items = new List <AttachDescriptor>();

            try
            {
                for (var i = 0; i < ATAConstants.MaxCommands; i++)
                {
                    // read from the xml feed
                    var item = new AttachDescriptor();
                    try
                    {
                        var value = reader.ReadSettingString(ATASettings.Keys.AttachDescriptorName, i);
                        if (value != null)
                        {
                            item.Name = value;
                        }

                        var enabled = reader.ReadSettingStringToBoolean(ATASettings.Keys.AttachDescriptorEnabled, i);
                        if (enabled.HasValue)
                        {
                            item.Enabled = enabled.Value;
                        }

                        var multiMatchHandling = reader.ReadSettingLong(ATASettings.Keys.AttachDescriptorMultipleMatchHandling, i);
                        item.MultiMatchHandling = multiMatchHandling == 0 ? MultiMatchOptions.Global : (MultiMatchOptions)multiMatch;

                        value = reader.ReadSettingString(ATASettings.Keys.AttachDescriptorProcessNames, i);
                        if (value != null)
                        {
                            item.ProcessNames = value.Split(new[] { ATAConstants.ProcessNamesSeparator[0] }, StringSplitOptions.RemoveEmptyEntries);
                        }

                        var parsedBool = reader.ReadSettingStringToBoolean(ATASettings.Keys.AttachDescriptorIsProcessNamesRegex, i);
                        if (parsedBool.HasValue)
                        {
                            item.IsProcessNamesRegex = parsedBool.Value;
                        }

                        value = reader.ReadSettingString(ATASettings.Keys.AttachDescriptorUsername, i);
                        if (value != null)
                        {
                            item.Username = value;
                        }

                        parsedBool = reader.ReadSettingStringToBoolean(ATASettings.Keys.AttachDescriptorIsUsernameRegex, i);
                        if (parsedBool.HasValue)
                        {
                            item.IsUsernameRegex = parsedBool.Value;
                        }

                        value = reader.ReadSettingString(ATASettings.Keys.AttachDescriptorAppPool, i);
                        if (value != null)
                        {
                            item.AppPool = value;
                        }

                        parsedBool = reader.ReadSettingStringToBoolean(ATASettings.Keys.AttachDescriptorIsAppPoolRegex, i);
                        if (parsedBool.HasValue)
                        {
                            item.IsAppPoolRegex = parsedBool.Value;
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine($"Unhandled exception in LoadSettingsFromXml:{ex}");
                    }

                    if (!string.IsNullOrWhiteSpace(item.Name) && item.ProcessNames != null && item.ProcessNames.Any())
                    {
                        items.Add(item);
                    }
                    else
                    {
                        // this ensures it is a clean item if any of the other properties were saved previously.
                        items.Add(new AttachDescriptor());
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"Unhandled exception in LoadSettingsFromXml:{ex}");
            }
            Attachables = new ReadOnlyCollection <AttachDescriptor>(items);
            // notify of newly loaded settings
            OnSettingsLoaded(EventArgs.Empty);
            base.LoadSettingsFromXml(reader);
        }
Exemple #7
0
 public DescriptorMenuCommand(EventHandler invokeHandler, int commandId, AttachDescriptor descriptor)
     : base(invokeHandler, new CommandID(ATAGuids.guidAnotherAttachToAnyCmdGroup, commandId), descriptor.ToString())
 {
     Descriptor         = descriptor;
     BeforeQueryStatus += OnBeforeQueryStatus;
 }