在这些年的编程过程中,我从来没有在这个网站上发布过问题,但我遇到了很多以前在这里解决过的问题。然而,现在我遇到了一个我似乎无法找到答案的问题。
我正在创建一个应用程序,在该应用程序中我需要来自系统上 ShadowCopies 的信息。我试图通过使用 WMI(在 C# 中)来实现这一点。然而,这给了我一个“初始化失败”的异常。代码如下: ManagementScope scope = new ManagementScope("\\.\ROOT\cimv2");
//create object query
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_ShadowCopy");
//create object searcher
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(scope, query);
//get collection of WMI objects
ManagementObjectCollection queryCollection = searcher.Get();
//enumerate the collection.
foreach (ManagementObject m in queryCollection)
{
// access properties of the WMI object
Console.WriteLine("ClientAccessible : {0}", m["ClientAccessible"]);
}
每当到达 foreach 行时,就会引发 ManagementException 并显示消息“初始化失败”。我完全不知道为什么会这样。如果我使用完全相同的代码并更改 WMI 类(更改为 Win32_Processor/Win32_LogicalDisk/...),我不会收到此异常,并且 foreach 循环正常工作。我还注意到异常来自语句“searcher.Get();”。我已经在 Windows Server 2008 机器和 Windows 7 Enterprise 机器上尝试过这段代码,两者都产生相同的异常。
我也尝试过在 vb-script 中使用这个类并且效果很好。VBS代码:
Set objWMIService = GetObject("winmgmts:\\" + ComputerName + "\root\cimv2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ShadowCopy")
For Each objItem in colItems
Wscript.Echo objItem.ClientAccessible
Next
我真的不知道是什么产生了这个异常,尤其是当我使用 VB 脚本时 WMI 类正在工作。有人看到我在这里做错了吗?任何帮助表示赞赏,如果您需要更多信息来解决此问题,请告诉我!
格雷茨,西蒙