【问题标题】:WMI classes referenceWMI 类参考
【发布时间】:2013-12-09 03:57:38
【问题描述】:

我有以下问题: 我想使用 WMI 类获取登录用户。 所以我尝试了这个:

    try
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROMWin32_LoggedOnUser");
        foreach (ManagementObject queryObj in searcher.Get())
        {
            accounttype += queryObj["Antecedent"];
        }
    }
    catch
    {
        accounttype = "error";
    }

但这不起作用,因为 queryObj 返回对Win32_Account 的引用! 我不知道如何读取这个Win32_Account 参考的值!

顺便说一句, 我知道还有其他方式(比如Environment.UserName,但我想大致了解这些崇敬!

谢谢!

【问题讨论】:

    标签: c# wmi


    【解决方案1】:

    Win32_LoggedOnUser WMI 类的AntecedentDependent 属性返回一个WMI Object Path,这是一个WMI 类实例的唯一ID,您可以访问该类的数据,创建一个实例到ManagementObject 对象,然后设置从ManagementPath 对象获取的属性Path

    试试这个示例

    using System;
    using System.Collections.Generic;
    using System.Management;
    using System.Text;
    
    namespace GetWMI_Info
    {
        class Program
        {
    
            static void Main(string[] args)
            {
                try
                {
                    ManagementScope Scope;
                    Scope = new ManagementScope(String.Format("\\\\{0}\\root\\CIMV2", "localhost"), null);
    
                    Scope.Connect();
                    ObjectQuery Query = new ObjectQuery("SELECT * FROM Win32_LoggedOnUser");
                    ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query);
    
                    foreach (ManagementObject WmiObject in Searcher.Get())
                    {
                        //Console.WriteLine("{0,-35} {1,-40}","Antecedent",WmiObject["Antecedent"]);// Reference
                        //Console.WriteLine("{0,-35} {1,-40}","Dependent",WmiObject["Dependent"]);// Reference
                        ManagementObject oAntecedent = new ManagementObject();
                        ManagementPath ObjectPath = new ManagementPath((String)WmiObject["Antecedent"]);//Win32_Account 
                        oAntecedent.Path = ObjectPath;
                        oAntecedent.Get();
    
                        Console.WriteLine("{0,-35} {1,-40}", "Caption", oAntecedent["Caption"]);// String
                        Console.WriteLine("{0,-35} {1,-40}", "Description", oAntecedent["Description"]);// String
                        Console.WriteLine("{0,-35} {1,-40}", "Domain", oAntecedent["Domain"]);// String
                        //Console.WriteLine("{0,-35} {1,-40}", "InstallDate", ManagementDateTimeConverter.ToDateTime((string)WmiObject["InstallDate"]));// Datetime
                        Console.WriteLine("{0,-35} {1,-40}", "LocalAccount", oAntecedent["LocalAccount"]);// Boolean
                        Console.WriteLine("{0,-35} {1,-40}", "Name", oAntecedent["Name"]);// String
                        Console.WriteLine("{0,-35} {1,-40}", "SID", oAntecedent["SID"]);// String
                        Console.WriteLine("{0,-35} {1,-40}", "SIDType", oAntecedent["SIDType"]);// Uint8
                        Console.WriteLine("{0,-35} {1,-40}", "Status", oAntecedent["Status"]);// String
                        Console.WriteLine();    
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(String.Format("Exception {0} Trace {1}",e.Message,e.StackTrace));
                }
                Console.WriteLine("Press Enter to exit");
                Console.Read();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多