Exemplo n.º 1
0
        public static void Refresh()
        {
            _instances.Clear();

            var tcpTable = ManagedIpHelper.GetExtendedTcpTable();

            foreach (var proc in Process.GetProcessesByName("msmdsrv"))
            {
                int _port = 0;
                LocalInstanceType _icon = LocalInstanceType.PowerBI;
                var parent = proc.GetParent();

                // exit here if the parent == "services" then this is a SSAS instance
                if (parent.ProcessName.Equals("services", StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                // if the process was launched from Visual Studio change the icon
                if (parent.ProcessName == "devenv")
                {
                    _icon = LocalInstanceType.Devenv;
                }

                // get the window title so that we can parse out the file name
                var parentTitle = parent.MainWindowTitle;
                if (parentTitle.Length == 0)
                {
                    // for minimized windows we need to use some Win32 api calls to get the title
                    parentTitle = GetWindowTitle(parent.Id);
                }

                // try and get the tcp port from the Win32 TcpTable API
                try
                {
                    var tcpRow = tcpTable.SingleOrDefault((r) => r.ProcessId == proc.Id && r.State == TcpState.Listen && IPAddress.IsLoopback(r.LocalEndPoint.Address));
                    if (tcpRow != null)
                    {
                        _port    = tcpRow.LocalEndPoint.Port;
                        _portSet = true;
                        _instances.Add(new LocalInstance(parentTitle, _port, _icon));
                        //Log.Debug("{class} {method} PowerBI found on port: {port}", "PowerBIHelper", "Refresh", _port);
                    }
                    else
                    {
                        //Log.Debug("{class} {method} PowerBI port not found for process: {processName} PID: {pid}", "PowerBIHelper", "Refresh", proc.ProcessName, proc.Id);
                    }
                }
                catch (Exception ex)
                {
                    //Log.Error("{class} {Method} {Error} {StackTrace}", "PowerBIHelper", "Refresh", ex.Message, ex.StackTrace);
                }
            }
        }
Exemplo n.º 2
0
 public LocalInstance(string name, int port, LocalInstanceType icon)
 {
     Port = port;
     Type = icon;
     try
     {
         var dashPos = name.LastIndexOf(" - ");
         if (dashPos >= 0)
         {
             Name = name.Substring(0, dashPos);
         }                                       // Strip "Power BI Designer" or "Power BI Desktop" off the end of the string
         else
         {
             //Log.Warning("{class} {method} {message} {dashPos}", "PowerBIInstance", "ctor", "Unable to find ' - ' in Power BI title", dashPos);
             Name = name;
         }
     }
     catch (Exception ex)
     {
         //Log.Error("{class} {method} {message} {stacktrace}", "PowerBIInstance", "ctor", ex.Message, ex.StackTrace);
         Name = name;
     }
 }