1

我有一个非常简单的 Powershell 查询:

Get-WmiObject -query 'ASSOCIATORS OF {Win32_LogicalDisk.DeviceID="C:"} WHERE AssocClass = Win32_LogicalDiskToPartition'

在 Windows 7(64 位)机器上,在 Powershell 中运行它会正确枚举单个管理对象。但是,如果我在提升的 Powershell 中运行相同的查询,我会暂停很长时间,然后没有结果。

我在尝试在代码中执行 WMI 查询时发现了一个类似的问题(这是我实际上想要做的)——当我的程序在没有提升的情况下运行时,代码可以工作,当它在提升的情况下运行时没有返回结果。这是显示此问题的代码的最简单版本:

static void Main(string[] args)
{
    var query = "ASSOCIATORS OF {Win32_LogicalDisk.DeviceID=\"C:\"} WHERE AssocClass = Win32_LogicalDiskToPartition";
    var searcher = new ManagementObjectSearcher(query);
    foreach (var o in searcher.Get())
    {
        Console.WriteLine(o);
    }
    Console.WriteLine("DONE");
    Console.ReadLine();
}

为什么会这样?更重要的是,无论如何,我可以确保在提升运行时此查询将正确执行 - 因为最终程序由于其他原因需要运行提升。

4

1 回答 1

0

我想我找到了罪魁祸首——我有一个使用 TrueCrypt 安装的加密驱动器。当我卸载该驱动器时,枚举正常工作,当我再次安装它时,问题再次出现。

我最好的猜测是,WMI 遇到了问题,因为加密的驱动器没有分区——尽管为什么它在不运行提升时工作完全是另一回事。

于 2013-06-26T12:49:32.467 回答