internal static void Init() { _comTree = new BrowserTree(); _comTree.Dock = DockStyle.Fill; _comTree.BorderStyle = BorderStyle.None; _comTree.UseIntermediateNodes = true; // Sucks, see comment in BrowserTreeNode.PostConstructor _comTree.Font = new Font(_comTree.Font, FontStyle.Bold); _comTabPage = new TabPage(); _comTabPage.Controls.Add(_comTree); _comTabPage.Text = "ActiveX/COM"; _comTabPage.BorderStyle = BorderStyle.None; // Favorite/recently accessed typelibs _favTypeLibNode = new BrowserTreeNode(); _favTypeLibNode.Text = StringParser.Parse("${res:ComponentInspector.ComTreeNode.Text}"); _favTypeLibNode.ChildrenAlreadyAdded = true; _favTypeLibNode.SetPresInfo(PresentationMap.COM_FOLDER_TYPELIB); _typeLibNode = new ComTypeLibRootTreeNode(); _typeLibNode.NodeOrder = 1; _progIdNode = new ComProgIdRootTreeNode(); _progIdNode.NodeOrder = 2; _classCatNode = new ComCatRootTreeNode(); _classCatNode.NodeOrder = 3; _classNode = new ComClassRootTreeNode(); _classNode.NodeOrder = 4; _interfaceNode = new ComInterfaceRootTreeNode(); _interfaceNode.NodeOrder = 5; _appIdNode = new ComAppIdRootTreeNode(); _appIdNode.NodeOrder = 6; _registeredNode = new BrowserTreeNode(); _registeredNode.Text = StringParser.Parse("${res:ComponentInspector.Registry.Text}"); _registeredNode.ChildrenAlreadyAdded = true; _registeredNode.SetPresInfo(PresentationMap.FOLDER_CLOSED); _comTree.AddNode(_favTypeLibNode); _comTree.AddNode(_registeredNode); _registeredNode.AddLogicalNode(_typeLibNode); _registeredNode.AddLogicalNode(_classNode); _registeredNode.AddLogicalNode(_classCatNode); _registeredNode.AddLogicalNode(_appIdNode); _registeredNode.AddLogicalNode(_interfaceNode); _registeredNode.AddLogicalNode(_progIdNode); _registeredNode.Expand(); _typelibs = ComponentInspectorProperties.PreviouslyOpenedTypeLibraries; }
// Restore the assemblies that were previously loaded public static void RestoreAssemblies() { AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(AssemblyLoadHandler); if (_assemblies.Count == 0) { return; } ProgressDialog progressDialog = new ProgressDialog(); progressDialog.Setup(StringParser.Parse("${res:ComponentInspector.ProgressDialog.LoadingPreviouslyOpenedAssembliesDialogTitle}"), StringParser.Parse("${res:ComponentInspector.ProgressDialog.LoadingPreviouslyOpenedAssembliesMessage}"), _assemblies.Count, ProgressDialog.HAS_PROGRESS_TEXT, ProgressDialog.FINAL); progressDialog.ShowIfNotDone(); TraceUtil.WriteLineInfo(null, DateTime.Now + " Assembly Restore start "); try { for (int i = _assemblies.Count - 1; i >= 0; --i) { PreviouslyOpenedAssembly assembly = _assemblies[i]; try { AssemblyName aName = new AssemblyName(); aName.CodeBase = assembly.CodeBase; TraceUtil.WriteLineInfo(null, DateTime.Now + " restore assy: " + assembly.CodeBase); progressDialog.UpdateProgressText(assembly.CodeBase); // Tell the TypeLibrary code the assembly // belongs to some type library Guid guid = Guid.Empty; // Don't mess with assemblies that came from // typelibs if the typelib is not there if (assembly.TypeLibGuid.Length > 0) { guid = new Guid(assembly.TypeLibGuid); TypeLibrary lib = TypeLibrary.GetTypeLibOpened(guid, assembly.TypeLibVersion); String assyFileName = new Uri(assembly.CodeBase).LocalPath; if (lib == null || !TypeLibrary.IsAssyCurrent(assyFileName, lib.FileName)) { TraceUtil.WriteLineInfo (null, DateTime.Now + " skipped assy (typelib not opened " + "or current): " + assembly.CodeBase); // Forget it _assemblies.Remove(assembly); progressDialog.UpdateProgress(1); continue; } } // The load event that happens under here causes the // assembly to appear in the tree Assembly assy = Assembly.Load(aName); // Tell the TypeLibrary code the assembly // belongs to some type library if (assembly.TypeLibGuid.Length > 0) { TypeLibrary.RestoreAssembly(assy, guid, assembly.TypeLibVersion); } TraceUtil.WriteLineInfo(null, DateTime.Now + " loaded assy: " + assembly.CodeBase); progressDialog.UpdateProgress(1); } catch (Exception ex) { TraceUtil.WriteLineWarning(null, "Assemblies - deleting bad assemblies entry: " + assembly.CodeBase + " " + ex); _assemblies.Remove(assembly); progressDialog.UpdateProgress(1); } } // This depends on having all of the assemblies restored TraceUtil.WriteLineInfo(null, DateTime.Now + " Assembly Restore end "); _assyRootNode.Expand(); } catch (Exception ex) { TraceUtil.WriteLineError(null, "Unexpected exception restoring assemblies: " + ex); } progressDialog.Finished(); }