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で問題が発生しています。ただし、昇格して実行されていないときにWMIが機能する理由はまったく別のものです。

于 2013-06-26T12:49:32.467 に答える