private bool IsMatch(AttachDescriptor descriptor, Process process) { var rtn = IsProcessMatch(descriptor, process) && IsUsernameMatch(descriptor, process) && IsAppPoolMatch(descriptor, process); return(rtn); }
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))); }
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)); }
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); }
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)); }
// 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); }
public DescriptorMenuCommand(EventHandler invokeHandler, int commandId, AttachDescriptor descriptor) : base(invokeHandler, new CommandID(ATAGuids.guidAnotherAttachToAnyCmdGroup, commandId), descriptor.ToString()) { Descriptor = descriptor; BeforeQueryStatus += OnBeforeQueryStatus; }