1

何年にもわたってプログラミングを行っている間、この 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 クラスが機能しているため、この例外の原因についてはまったくわかりません。ここで私が間違っていることを誰かが見ていますか? この問題を解決するためにさらに情報が必要な場合は、お知らせください。

グリーツ、サイモン

//注: このコードは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 で実行すると、期待どおりに機能します。

つまり、Win32_ShadowCopy wmi クエリを含む hta アプリケーションを 64 ビット バージョンの mshta.exe で実行します。

お役に立てれば

于 2016-11-01T01:20:58.880 に答える