小编You*_*per的帖子

如何使用C#获取DefragAnalysis

我目前正在开发一个C#(.NET 4.0)应用程序,该应用程序应该具有确定特定卷上碎片百分比的功能.所有其他功能都经过测试,工作正常,但我试图访问这些数据.我理想情况下更喜欢使用WMI,因为这与我用于其他功能的格式相匹配,但此时我愿意使用任何可以有效集成到应用程序中的内容,即使我必须使用RegEx来过滤数据.我目前正在Windows 7 Professional(x64)机器上进行开发.我使用管理员权限测试了以下Powershell代码段,它可以完美运行.

$drive = Get-WmiObject -Class Win32_Volume -Namespace root\CIMV2  -ComputerName . |   Where-Object { $_.DriveLetter -eq 'D:' }
$drive.DefragAnalysis().DefragAnalysis
Run Code Online (Sandbox Code Playgroud)

这是我在C#中使用的方法来完成同样的事情,但InvokeMethod保持返回11(0xB).

public static Fragmentation GetVolumeFragmentationAnalysis(string drive)
{
//Fragmenation object initialization removed for simplicity
        try
        {
            ConnectionOptions mgmtConnOptions = new ConnectionOptions { EnablePrivileges = true };
            ManagementScope scope = new ManagementScope(new ManagementPath(string.Format(@"\\{0}\root\CIMV2", Environment.MachineName)), mgmtConnOptions);
            ObjectQuery query = new ObjectQuery(string.Format(@"SELECT * FROM Win32_Volume WHERE Name = '{0}\\'", drive));
            scope.Connect();
            using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
            {
                object[] outputArgs = new …
Run Code Online (Sandbox Code Playgroud)

c# powershell wmi defragmentation wql

5
推荐指数
1
解决办法
1011
查看次数

标签 统计

c# ×1

defragmentation ×1

powershell ×1

wmi ×1

wql ×1