Beispiel #1
0
        public void HandleAttachTo(string target)
        {
            if (target == OpenDialogTarget)
            {
                _logger.WriteLine("Opening 'Attach to Process' dialog…");
                _dte.ExecuteCommand("Tools.AttachtoProcess");
                return;
            }

            AttachTo(target);
        }
Beispiel #2
0
        public Task WaitForAsync(string name, CancellationToken cancellationToken)
        {
            _logger.WriteLine("Attempting {0} wait.", IsEfficient ? "efficient" : "inefficient");

            var taskSource = new TaskCompletionSource <object>();
            var query      = IsEfficient
                      ? new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName = '" + name + "'")
                      : new EventQuery("SELECT TargetInstance FROM __InstanceCreationEvent WITHIN 0.5 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name LIKE '" + name + "'");

            ManagementEventWatcher watcher = null;

            try {
                watcher = new ManagementEventWatcher(query);
                cancellationToken.Register(() => {
                    _logger.WriteLine("Received Cancel while waiting for '{0}'.", name);
                    watcher.Stop();
                    watcher.Dispose();
                    taskSource.TrySetCanceled();
                });
                watcher.EventArrived += (sender, e) => {
                    _logger.WriteLine("Received process start event for '{0}'.", name);
                    watcher.Stop();
                    watcher.Dispose();
                    taskSource.TrySetResult(null);
                };

                try {
                    watcher.Start();
                }
                catch (ManagementException) {
                    if (!IsEfficient)
                    {
                        throw;
                    }

                    watcher.Dispose();
                    IsEfficient = false;
                    return(WaitForAsync(name, cancellationToken));
                }
            }
            catch (Exception) {
                if (watcher != null)
                {
                    watcher.Dispose();
                }
                throw;
            }

            return(taskSource.Task);
        }
        private void SolutionEvents_Opened()
        {
            var solution     = _dte.Solution;
            var solutionName = solution.GetName();

            _logger.WriteLine("Solution '{0}' opened.", solutionName);
            if (string.IsNullOrEmpty(solutionName))
            {
                // https://github.com/ashmind/SolutionIcon/issues/4
                // I can't reproduce this for now, so jsut skipping.
                // However in the future I should improve it to work
                // with new "Open Folder".
                _logger.WriteLine("Solution name is empty, ignoring.");
                return;
            }

            try {
                using (var icon = GetIcon(solution)) {
                    TaskbarManager.Instance.SetOverlayIcon(icon, "");
                }
            }
            catch (Exception ex) {
                _logger.WriteLine(ex.ToString());
            }
        }
Beispiel #4
0
        private uint ConvertToUIContextCookie(Guid guid)
        {
            uint cookie;
            var  hr = _monitorSelection.GetCmdUIContextCookie(ref guid, out cookie);

            if (hr != VSConstants.S_OK)
            {
                Marshal.ThrowExceptionForHR(hr);
            }

            _logger.WriteLine("Mapped UI context {0} to cookie {1}.", guid, cookie);
            return(cookie);
        }
        public SolutionIconManager(DTE dte, IconFinder iconFinder, IconConverter iconConverter, IconGenerator iconGenerator, IDiagnosticLogger logger)
        {
            _dte           = dte;
            _iconFinder    = iconFinder;
            _iconConverter = iconConverter;
            _iconGenerator = iconGenerator;
            _logger        = logger;

            if (!TaskbarManager.IsPlatformSupported)
            {
                _logger.WriteLine("Overlay icons are not supported on this platform, exiting.");
                return;
            }

            _solutionEvents               = _dte.Events.SolutionEvents;
            _solutionEvents.Opened       += SolutionEvents_Opened;
            _solutionEvents.AfterClosing += SolutionEvents_AfterClosing;
        }
Beispiel #6
0
        private void SolutionEvents_Opened()
        {
            var solution = _dte.Solution;

            _logger.WriteLine("Solution '{0}' opened.", solution.GetName());

            try {
                using (var icon = GetIcon(solution)) {
                    TaskbarManager.Instance.SetOverlayIcon(icon, "");
                }
            }
            catch (Exception ex) {
                _logger.WriteLine(ex.ToString());
            }
        }
 private void ProcessSessionCreateOrDestoryEvent(string logSessionAs)
 {
     _logger.WriteLine("Event: Debug session {0}.", logSessionAs);
     DebugSessionChanged(this, EventArgs.Empty);
 }
Beispiel #8
0
        private void EnsureManagedExceptionCache()
        {
            if (_exceptionCache != null)
            {
                return;
            }

            var guid = VSConstants.DebugEnginesGuids.ManagedOnly_guid;

            var root  = GetDefaultExceptions();
            var list  = new List <EXCEPTION_INFO>(root.Where(e => e.guidType == guid));
            var index = 0;

            while (index < list.Count)
            {
                var children = GetDefaultExceptions(list[index]);
                list.AddRange(children);

                index += 1;
            }

            _exceptionCache = list;
            _logger.WriteLine("Exception cache is built: {0} exceptions.", _exceptionCache.Count);
            ExceptionNamesChanged(this, EventArgs.Empty);
        }