1

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

我正在创建一个应用程序,在该应用程序中我需要来自系统上 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 类正在工作。有人看到我在这里做错了吗?任何帮助表示赞赏,如果您需要更多信息来解决此问题,请告诉我!

格雷茨,西蒙

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

4

3 回答 3

5

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

于 2013-07-08T03:10:24.323 回答
4

我编写的执行实时 WIM 备份的脚本也遇到了同样的问题。你运行这个的系统有UAC吗?如果是这样,请尝试将其关闭或以管理员身份运行该应用程序 - 一旦我这样做,它就会栩栩如生。

希望这可以帮助

于 2012-07-09T00:57:24.400 回答
0

在 Windows Server 2008 R2 上工作时,我遇到了同样的问题。

这是我发现的:

mshta.exe 在我的系统中有 2 个版本:
- C:\Windows\System32\mshta.exe(64 位)
- C:\Windows\SysWOW64\mshta.exe(32 位)

在注册表中,与 hta 文件 (HKCR\htafile\Shell\Open\Command) 关联的应用程序是 C:\Windows\SysWOW64\mshta.exe,Win32_ShadowCopy 查询不起作用。
另一方面,包含查询的 hta 文件在使用 C:\Windows\System32\mshta.exe 运行时按预期工作。

总之:使用 64 位版本的 mshta.exe 运行包含 Win32_ShadowCopy wmi 查询的 hta 应用程序。

希望这可以帮助

于 2016-11-01T01:20:58.880 回答