Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        // 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();
        }