【发布时间】:2017-03-23 18:22:37
【问题描述】:
大家好, 我遇到了 ManagementObjectSearcher 的问题。我正在尝试查询我想要的确切值,但找不到对精确语法要求的任何引用,并且在尝试将代码完成为我需要的代码时,我不断收到错误消息。
出现问题的代码的特定部分是当我检查驱动器加密状态时(我知道我的磁盘在这台机器上没有加密,这就是为什么这是我唯一的值 if' d 目前)。在获取此代码以提取正确值方面的任何帮助将不胜感激。
我已经尝试了“=”方法和“LIKE”方法,但输出没有变化。
using Microsoft.Win32;
using System;
using System.Drawing;
using System.IO;
using System.Management;
using System.Windows.Forms;
public Form1()
{
InitializeComponent();
// Check for OS Version
string OSVer = Convert.ToString(Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ProductName", null));
OSDialog.Text = OSVer;
// Check Architecture
if (Directory.Exists("C:\\Program Files (x86)"))
{
ArchitectureDialog.Text = "64 Bit";
}
else
{
ArchitectureDialog.Text = "32 Bit";
}
// Check Encryption
ManagementObjectSearcher Collect = new ManagementObjectSearcher("SELECT ProtectionStatus FROM Win32_EncryptableVolume WHERE DriveLetter = 'C:'");
string Encryption = Collect.ToString();
if (Encryption == "0")
{
EncryptionDialog.Text = "Disk is not Encrypted";
EncryptionDialog.ForeColor = Color.Green;
}
}
private void Cancel_Click(object sender, EventArgs e)
{
Close();
}
【问题讨论】:
-
也许你应该检查你从
Collect.ToString();得到的值 -
您不应该在
ManagementObjectSearcher而不是ToString()上拨打Get吗? "Get ... 调用指定的 WMI 查询并返回结果集合。" -
不使用
Collect.ToString(),由于它是“ManagementObject”,因此输出不会在 if 语句中起作用。我的想法是通过使用 SQLesque 语法来处理 WMI 对象,我应该直接从查询中提取我需要的值,但它需要转换为在 if 语句中工作。这只是我对此事的想法。甚至在转换之前添加几行Get也不会产生丰硕的结果。 -
你是在使用调试器查看
Collect.ToString();的结果吗?如果是这样,您会看到它返回System.Management.ManagementObjectSearcher