Opc.Ua.Configuration.PseudoComServer.Enumerate C# (CSharp) Method

Enumerate() public static method

Returns the UA COM Pseudo-servers registered on the local computer.
public static Enumerate ( ) : List
return List
		public static List<ConfiguredEndpoint> Enumerate()
		{
			// enumerate server clsids.
			List<Guid> clsids = ConfigUtils.EnumClassesInCategory(ConfigUtils.CATID_PseudoComServers);

			// initialize server objects.
			List<ConfiguredEndpoint> servers = new List<ConfiguredEndpoint>();

			for (int ii = 0; ii < clsids.Count; ii++)
			{
                ConfiguredEndpoint server = null;

                try
                {
                    server = Load(clsids[ii]);
                    servers.Add(server);
                }
                catch (Exception e)
                {
                    Utils.Trace(e, "Unexpected error loading psuedo-server: {0}", clsids[ii]);
                    continue;
                }
                
                // ensure the Pseudo-server points to the correct host process.
                Guid hostClsid = Guid.Empty;

                if (server.ComIdentity != null)
                {
                    hostClsid = GetServerHostClsid(server.ComIdentity.Specification);
                }

				string hostPath = ConfigUtils.GetExecutablePath(hostClsid);

				if (String.IsNullOrEmpty(hostPath))
				{
					continue;
				}
	
				RegistryKey key = Registry.ClassesRoot.OpenSubKey(String.Format(@"CLSID\{{{0}}}\LocalServer32", clsids[ii]), false);
		
				if (key != null)
				{
                    if (hostPath != (string)key.GetValue(null, ""))
                    {
                        try
                        {
					        key.Close();
                            key = Registry.ClassesRoot.OpenSubKey(String.Format(@"CLSID\{{{0}}}\LocalServer32", clsids[ii]), true);
                            key.SetValue(null, hostPath);
                        }
                        catch (Exception)
                        {
                            Utils.Trace("Could not update COM proxy server path for {0}.", server.ComIdentity.ProgId); 
                        }
                    }

					key.Close();
				}
			}

			return servers;
		}