c# - 查询 WMI 类 Win32_ShadowCopy 时初始化失败

标签 c# wmi shadow-copy

在这些年的编程过程中,我从来没有在这个网站上发布过问题,但我遇到了很多以前在这里解决过的问题。然而,现在我遇到了一个我似乎无法找到答案的问题。

我正在创建一个应用程序,在该应用程序中我需要来自系统上 ShadowCopies 的信息。我试图通过使用 WMI(在 C# 中)来实现这一点。然而,这给了我一个“初始化失败”的异常。
这是代码:
ManagementScope 范围 = 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 类正在工作。有人看到我在这里做错了吗?任何帮助表示赞赏,如果您需要更多信息来解决此问题,请告诉我!

问候,
西蒙

//注意:我从 http://include.wutils.com/wmi/ROOT%5Ccimv2/CIM_ManagedSystemElement/CIM_LogicalElement/Win32_ShadowCopy/cs-samples.html 获得此代码

最佳答案

假设您运行的是 64 位版本的 Windows,在项目属性中,取消选中常规下的“首选 32 位”。我发现除了以管理员身份运行 Visual Studio 之外,这对于防止引发“初始化失败”异常是必要的。我相信您不能从 64 位平台上的 32 位应用程序调用 WMI 方法。

关于c# - 查询 WMI 类 Win32_ShadowCopy 时初始化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6856309/

相关文章:

c# - 运算符 |= 在 C# 中是什么意思?

c# - Azure Function 应该在错误时记录或抛出异常吗?

c# - WMI 重启远程机器

c++ - 主板 ID - WMI C++ - 可靠吗?

powershell - 如何仅使用CIM cmdlet(不使用WMI cmdlet)在Powershell中创建VSS卷影副本?

c# - 为什么这个 JavaScript 不显示确认框?

c# - 如何使用配置转换删除 ConnectionString

c++ - 即使 OpenVirtualDisk 成功,QueryChangesVirtualDisk 仍返回 ERROR_INVALID_HANDLE(6)

c++ - 卷影拷贝与数据保护管理器

c# - MEF 和 ShadowCopying DLL,以便我可以在运行时覆盖它们