查询WMI类Win32_ShadowCopy时初始化失败

时间:2011-07-28 08:48:10

标签: c# wmi shadow-copy

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

我正在创建一个应用程序,其中我需要来自系统上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,并显示消息“Initialization Failure”。我完全不知道为什么会这样。如果我使用完全相同的代码并更改WMI类(到Win32_Processor / Win32_LogicalDisk / ...)我没有得到这个异常,foreach循环正常工作。我还注意到异常来自语句“searcher.Get();”。 我在Windows Server 2008计算机以及Windows 7企业计算机上尝试过此代码,两者都会产生相同的异常。

我也试过在vb脚本中使用这个类并且有效。 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

获得了此代码

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

我遇到了与我编写的执行实时WIM备份的脚本相同的问题。您运行此系统的系统是否具有UAC?如果是这样,请尝试将其关闭或以管理员身份运行应用程序 - 只要我这样做,它就会栩栩如生。

希望这有帮助

答案 2 :(得分:0)

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

这是我发现的:

mshta.exe在我的系统中有两个版本:
- 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查询无法使用该应用程序。
另一方面,当使用C:\ Windows \ System32 \ mshta.exe运行时,包含查询的hta文件按预期工作。

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

希望这有帮助