WMI 无效查询错误
本文关键字:错误 查询 无效 WMI | 更新日期: 2023-09-27 18:32:48
我正在尝试获取c:''windows'tds''目录中存在的此dsa文件的大小。
我在这里遇到错误,我不知道为什么。错误为"无效查询"。
当我使用不同的 WMI 类时,我似乎经常收到此错误。
我不知道为什么会发生此错误以及如何解决此问题?
下面的代码中是否有任何错误,如何解决这个问题?
为什么我们会得到这个无效查询错误,它的来源是什么?它的内部异常将始终为空?
private int getDatabaseFileSize(string DSADatabaseFile, string machineName)
{
string scope = @"''" + machineName + @"'root'CIMV2";
string query = string.Format("Select FileSize from CIM_DataFile WHERE Name = '{0}'", DSADatabaseFile);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection collection = searcher.Get();
foreach (ManagementObject mobj in searcher.Get())
{
Console.WriteLine("File Size : " + mobj["FileSize"]);
}
return 0;
}
谢谢
我
猜,但由于您的查询在语法上是正确的并且使用正确的字段和对象名称,因此我认为这是因为您将字符串"C:''Windows''NTDS'tds.dit"作为DSADatabaseFile
传递。这将纠正 C# 中的"典型"用法,例如使用 Path
类等,但此处不行。
您需要将带有两个反斜杠的文件名传递给 WMI。但是,由于 C# 已经需要这样做,因此您需要有效地传递四个:
getDatabaseFileSize("C:''''Windows''''NTDS''''ntds.dit", machine)
或使用逐字字符串文字:
getDatabaseFileSize(@"C:''Windows''NTDS''ntds.dit", machine);
更新 这是一个完整的示例:
// Compile with: csc foo.cs /r:System.Management.dll
using System;
using System.Management;
namespace Foo
{
public class Program
{
private int getDatabaseFileSize(string DSADatabaseFile, string machineName)
{
string scope = @"''" + machineName + @"'root'CIMV2";
string query = string.Format("Select FileSize from CIM_DataFile WHERE Name = '{0}'", DSADatabaseFile);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection collection = searcher.Get();
foreach (ManagementObject mobj in searcher.Get())
{
Console.WriteLine("File Size : " + mobj["FileSize"]);
}
return 0;
}
public static void Main(string[] args)
{
var p = new Program();
// These work
p.getDatabaseFileSize("C:/boot.ini", ".");
p.getDatabaseFileSize(@"C:''boot.ini", ".");
p.getDatabaseFileSize("C:''''boot.ini", ".");
// These fail
try {
p.getDatabaseFileSize("C:''boot.ini", ".");
} catch (ManagementException ex) {
Console.WriteLine("Failed: {0}", ex.ErrorCode);
}
try {
p.getDatabaseFileSize(@"C:'boot.ini", ".");
} catch (ManagementException ex) {
Console.WriteLine("Failed: {0}", ex.ErrorCode);
}
}
}
}
编译方式:
(预期的)输出为:
File Size : 313
File Size : 313
Failed: InvalidQuery.
Failed: InvalidQuery.
更新似乎已经有一个相关的问题(提到需要''''
而不是''
)。