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;
}