public override ContextMenuItem[] GetContextMenuItems()
        {
            try
            {
                if (this.IsNewInstance)
                {
                    return(new ContextMenuItem[0]);
                }

                ManagementClass  localObj = this.mgmtClassObj;
                MethodCollection methods  = null;

                try
                {
                    int methodCount = localObj.Methods.Count;
                }
                catch (Exception)
                {
                    ConnectionOptions connectOpts = new ConnectionOptions(
                        "",                 //locale
                        this.connectAs,     //username
                        this.password,      //password
                        "",                 //authority
                        ImpersonationLevel.Impersonate,
                        AuthenticationLevel.Connect,
                        true,                 //enablePrivileges
                        null                  //context
                        );

                    ManagementScope scope = (this.serverName == WmiHelper.DNS2UNC(Dns.GetHostName())) ?
                                            new ManagementScope(WmiHelper.MakeNSPath(serverName, nsName)):
                                            new ManagementScope(WmiHelper.MakeNSPath(serverName, nsName), connectOpts);



                    localObj = new ManagementClass(scope,
                                                   new ManagementPath(mgmtClassObj.Path.Path),
                                                   new ObjectGetOptions(null,
                                                                        true) //use amended
                                                   );
                }
                methods = localObj.Methods;

                ContextMenuItem[] theMenu = new ContextMenuItem[methods.Count + 2];

                int i = 0;

                //TODO: retrieve non-static methods for the class and add them to context menu
                MethodCollection.MethodEnumerator methEnum = methods.GetEnumerator();

                while (methEnum.MoveNext())
                {
                    Method meth = methEnum.Current;

                    if (WmiHelper.IsImplementedMethod(meth) && !WmiHelper.IsStaticMethod(meth))
                    {
                        //add method name to context menu
                        theMenu[i++] = new ContextMenuItem("&" + i.ToString() + " " + meth.Name + "...",                 //TODO: hotkey???
                                                           new EventHandler(OnExecuteMethod));
                    }
                }

                if (IsNewInstance)
                {
                    theMenu[i] = new ContextMenuItem(WMISys.GetString("WMISE_InstNode_SaveNewInstanceCM"),
                                                     new EventHandler(CommitNewInstance));
                }

                return(theMenu);
            }

            catch (Exception exc)
            {
                MessageBox.Show(WMISys.GetString("WMISE_Exception", exc.Message, exc.StackTrace));
                return(null);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Context menu for a class object contains static method names
        /// </summary>
        public override ContextMenuItem[] GetContextMenuItems()
        {
            try
            {
                //System.Threading.Thread.CurrentThread.ApartmentState = ApartmentState.MTA;

                ManagementClass  localObj = mgmtObj;
                MethodCollection methods  = null;

                try
                {
                    int methodCount = localObj.Methods.Count;
                }
                catch (Exception)
                {
                    ConnectionOptions connectOpts = new ConnectionOptions(
                        "",                 //locale
                        this.connectAs,     //username
                        this.password,      //password
                        "",                 //authority
                        ImpersonationLevel.Impersonate,
                        AuthenticationLevel.Connect,
                        true,                 //enablePrivileges
                        null                  //context
                        );

                    ManagementScope scope = (this.serverName == WmiHelper.DNS2UNC(Dns.GetHostName())) ?
                                            new ManagementScope(WmiHelper.MakeNSPath(serverName, nsName)):
                                            new ManagementScope(WmiHelper.MakeNSPath(serverName, nsName), connectOpts);


                    localObj = new ManagementClass(scope,
                                                   new ManagementPath(path),
                                                   new ObjectGetOptions(null,
                                                                        true) //use amended
                                                   );
                }

                methods = localObj.Methods;

                /*
                 * string propNames = "";
                 * foreach (System.Management.Property prop in mgmtObj.Properties)
                 * {
                 *      propNames += prop.Name + "\n";
                 * }
                 * MessageBox.Show(propNames);
                 *
                 * MessageBox.Show("class has " + mgmtObj.Properties.Count + " properties");
                 *
                 * string methNames = "";
                 * foreach (Method meth in methods)
                 * {
                 *      methNames += meth.Name + "\n";
                 * }
                 * MessageBox.Show(methNames);
                 *
                 */
                Project[] projects      = VSUtils.GetProjects(GetNodeSite());
                bool      enableCodeGen = false;
                if (projects != null && projects.Length != 0)
                {
                    ICodeGenerator codeGen = VSUtils.MapProjectGuidToCodeGenerator(new Guid(projects[0].Kind));
                    if (codeGen == null)
                    {
                        MessageBox.Show("codeGen is null, project is: " + projects[0].Kind);
                    }
                    enableCodeGen = (codeGen != null);
                }

                ContextMenuItem[] theMenu = new ContextMenuItem[methods.Count + 2];

                //theMenu[0] = new ContextMenuItem("&View All Instances...", new EventHandler(OnExpandAll));
                //theMenu[1] = new ContextMenuItem("&Filter Instances...", new EventHandler(OnAddInstanceFilter));

                theMenu[0] = new ContextMenuItem(WMISys.GetString("WMISE_ClassNode_CreateNewInstance"),
                                                 new EventHandler(OnCreateNewInstance),
                                                 false);

                theMenu[1] = new ContextMenuItem(WMISys.GetString("WMISE_ClassNode_GenerateWrapper"),
                                                 new EventHandler(OnGenerateWrapper),
                                                 enableCodeGen);

                int i = 2;

                //Retrieve static methods for the class and add them to context menu
                MethodCollection.MethodEnumerator methEnum = methods.GetEnumerator();

                while (methEnum.MoveNext())
                {
                    Method meth = methEnum.Current;

                    if (WmiHelper.IsStaticMethod(meth) && WmiHelper.IsImplementedMethod(meth))
                    {
                        //add method name to context menu
                        theMenu[i] = new ContextMenuItem("&" + i.ToString() + " " + meth.Name + "...",                 //TODO: hotkey???
                                                         new EventHandler(OnExecuteMethod));
                        i++;
                    }
                }

                methEnum = null;

                return(theMenu);
            }

            /*
             * catch (ManagementException exc)
             * {
             * MessageBox.Show("ManagementException hr is " + exc.ErrorCode.ToString());
             * MessageBox.Show(WMISys.GetString("WMISE_Exception", exc.Message, exc.StackTrace));
             *
             * return null;
             * }
             */
            catch (Exception exc)
            {
                MessageBox.Show(WMISys.GetString("WMISE_Exception", exc.Message, exc.StackTrace));
                return(null);
            }
        }