何年にもわたってプログラミングを行っている間、この Web サイトに質問を投稿したことはありませんが、以前にここで対処されていた多くの問題に遭遇しました。しかし今、私は答えが見つからないように見える問題に遭遇しました。
システム上の 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スクリプトで使用しようとしましたが、うまくいきました。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 クラスが機能しているため、この例外の原因についてはまったくわかりません。ここで私が間違っていることを誰かが見ていますか? この問題を解決するためにさらに情報が必要な場合は、お知らせください。
グリーツ、サイモン