查询wmi类Win32_ShadowCopy时初始化失败



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

我正在创建一个应用程序,我需要从系统上的ShadowCopies信息。我正试图通过使用WMI(在c#中)来实现这一点。然而,这给了我一个"初始化失败"的例外。代码如下:ManagementScope scope = new ManagementScope("\.ROOTcimv2");

//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循环只是工作。我还注意到异常来自语句"search . get();"。我在Windows Server 2008机器和Windows 7 enterprise机器上尝试了这段代码,两者都产生了相同的异常。

我也试过在vb-script中使用这个类,并且工作了。VBS代码:

Set objWMIService = GetObject("winmgmts:\" + ComputerName + "rootcimv2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ShadowCopy")
For Each objItem in colItems
    Wscript.Echo objItem.ClientAccessible
Next

我真的不知道是什么产生了这个异常,特别是因为当我使用vb脚本时,wmi类正在工作。有人知道我哪里做错了吗?任何帮助是感激的,如果你需要更多的信息来解决这个问题,只是让我知道!

Greetz,西蒙。

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

得到这个代码

假设您运行的是64位版本的Windows,在"项目属性"中,取消勾选"通用"下的"首选32位"。我发现,除了以管理员身份运行Visual Studio之外,这对于防止抛出"Initialization Failure"异常是必要的。我相信您无法在64位平台上从32位应用程序调用WMI方法。

我编写的执行实时WIM备份的脚本也有同样的问题。你运行的系统有UAC吗?如果是这样,试着关掉它或者以管理员身份运行应用程序——我一这么做,它就活过来了。

希望能有所帮助

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

下面是我的发现:

mshta.exe在我的系统中有两个版本:- C:WindowsSystem32mshta.exe(64位)
- C:WindowsSysWOW64mshta.exe(32位)

在注册表中,与hta文件(HKCRhtafileShellOpenCommand)关联的应用程序为C:WindowsSysWOW64mshta.exe,其中Win32_ShadowCopy查询不起作用。
另一方面,当使用C:WindowsSystem32mshta.exe运行时,包含查询的hta文件按预期工作。

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

希望能有所帮助

相关内容

  • 没有找到相关文章

最新更新