-1
  public ManagementScope GetScope()
    {
        try
        {
            //string classScope="winmgmts:" + "{impersonationLevel=impersonate}!\\" + strComputer + "\\root\\cimv2";
            string serverString = @"root\cimv2";

            ManagementScope scope = new ManagementScope(serverString);


                ConnectionOptions options = new ConnectionOptions
                {
                    Impersonation = ImpersonationLevel.Impersonate,
                    Authentication = AuthenticationLevel.Connect,
                    EnablePrivileges = true
                };
                scope.Options = options; 

            return scope; 
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            throw;
        }
    }

    public void InvokeMethodsFunctions1()
    {
        ManagementScope mScope = GetScope();

        mScope.Connect();

        if (mScope.IsConnected)
        {
            ManagementClass processClass =
                new ManagementClass(mScope.Path);
            ManagementObjectSearcher mos = new ManagementObjectSearcher(mScope, new ObjectQuery("SELECT * FROM Win32_Product"));
            //get collection of WMI objects
            ManagementObjectCollection queryCollection = mos.Get();

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"Result.txt"))
            {
                textBox1.Text = "";
                //enumerate the collection.
                foreach (ManagementObject m in queryCollection)
                {
                    // access properties of the WMI object
                    string line = " " + m["Name"] + " , InstallDate : " + m["InstallDate"] + " LocalPackage : " + m["LocalPackage"];
                    Console.WriteLine(line);
                    file.WriteLine(line);
                    textBox1.Text += line + "\n";
                }
            }

       }

    }

私のコードで何が問題なのですか?

4

2 に答える 2

2

何も問題はありませんWin32_Product。WMI クラスは、Windows インストーラー(MSI) によってインストールされた製品のみを一覧表示します。

于 2013-10-30T16:50:38.220 に答える
1

私はあなたのコードの次の簡略化されたバージョンをテストしたところ、自分で作成してインストールしたサービスも含め、すべてが自分の PC にインストールされていることがわかります。

var products = new ManagementObjectSearcher(new ObjectQuery("SELECT * FROM Win32_Product"));
var result = products.Get();

foreach (var product in result)
{
    Console.WriteLine(product.GetPropertyValue("Name").ToString());
}

Console.ReadLine();

スコープによってクエリを絞り込んでいるように見えます。これが原因ですべてが表示されない可能性があります。上記を試して、うまくいくかどうかを確認してください。

于 2013-10-30T16:01:53.770 に答える