我有一个非常简单的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();
}
为什么会这样?更重要的是,无论如何,我可以确保在运行提升时此查询将正确执行 - 因为最终程序需要因其他原因而升级。
答案 0 :(得分:0)
我想我找到了罪魁祸首 - 我使用TrueCrypt安装了加密驱动器。当我卸载该驱动器时,枚举正常工作,当我再次安装它时,问题会重新出现。
我最好的猜测是WMI遇到了问题,因为加密的驱动器没有分区 - 尽管为什么它在没有运行提升时工作是另一回事。