次の方法で共有


方法 : プロバイダの読み込みエラーを修正する

WMI クライアントでは、WMI プロバイダに実装されている機能を使用しようとすると、"プロバイダによる読み込みエラーです" というエラーが返されることがあります。これは、WMI プロバイダの拡張機能のインフラストラクチャが利用されている場合に発生します。

原因として、ダイナミック リンク ライブラリ (DLL) が正しく登録されていない可能性があります。.NET Framework 3.5 (SP1 の前) のインストールでは、System.Management.Instrumentation.dll という DLL が正しく登録されません。

登録を実行するには、DLL の完全パスを唯一の引数として指定して、Regasm.exe ツールを実行します。次の手順では、System.Management.Instrumentation.dll を正しく登録する方法を示します。

System.Management.Instrumentation.dll の登録

  1. [スタート] ボタンをクリックし、[すべてのプログラム] をクリックします。

  2. [Microsoft Visual Studio 2008] をクリックし、[Visual Studio Tools] をクリックします。

  3. Windows Vista より前のオペレーティング システムでは、[Visual Studio 2008 コマンド プロンプト] をクリックしてコマンド プロンプト ウィンドウを開きます。Windows Vista では、[Visual Studio 2008 コマンド プロンプト] を右クリックし、[管理者として実行] をクリックして、管理者特権のコマンド プロンプト ウィンドウを開きます。

  4. コマンド プロンプトで、「regasm %systemdrive%\program files\reference assemblies\microsoft\framework\v3.5\system.management.instrumentation.dll」と入力し、Enter キーを押します。

  5. "型は正常に登録されました" というメッセージが表示されたことを確認します****。登録が修正されたことを確認するには、後に示す WSH スクリプトを実行します。修正されていれば、"System.Management.Instrumentation for .NET Framework 3.5 is already registered" というメッセージが表示されます。

次のサンプル スクリプトでは、WSH スクリプトの WMI レジストリ プロバイダを使用して、System.Management.Instrumentation.dll の登録の修正を自動化する方法を示します。このスクリプトをベースとして使用すると、WMI プロバイダの拡張機能のインフラストラクチャを利用する WMI プロバイダをインストールする前に、その登録が正しいことを確認する独自のスクリプトを作成できます。複数のリモート コンピュータを対象とするようにスクリプトを変更する方法は、TechNet Script Center で見つけることができます。

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\default") 
' Obtain an object of the class 

Set objShare = objWMIService.Get("StdRegProv")

' Obtain an InParameters object specific
' to the method.
Set objInParam = objShare.Methods_("GetStringValue").inParameters.SpawnInstance_()


' Add the input parameters.
objInParam.Properties_.Item("hDefKey") =  2147483648
objInParam.Properties_.Item("sSubKeyName") =  "CLSID\{54D8502C-527D-43F7-A506-A9DA075E229C}\Inprocserver32"
objInParam.Properties_.Item("sValueName") =  "Assembly"

' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("StdRegProv", "GetStringValue", objInParam)

' List OutParams
If objOutParams.ReturnValue = 0 Then
WScript.Echo "Out Parameters: "
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
WScript.Echo "sValue: " & objOutParams.sValue
Else
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
WScript.Echo "Not able to retrieve Registration of System.Management.Instrumentation. Check if .NET Framework 3.5 is installed"
WScript.Quit
End If

If (objOutParams.sValue = "System.Management.Instrumentation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") Then

WScript.Echo "Set String Values"
' Obtain an InParameters object specific
' to the method.
Set objInParam = objShare.Methods_("SetStringValue"). _
    inParameters.SpawnInstance_()


' Add the input parameters.
objInParam.Properties_.Item("hDefKey") =  2147483648
objInParam.Properties_.Item("sSubKeyName") =  "CLSID\{54D8502C-527D-43F7-A506-A9DA075E229C}\Inprocserver32"
objInParam.Properties_.Item("sValue") =  "System.Management.Instrumentation, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
objInParam.Properties_.Item("sValueName") =  "Assembly"

' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("StdRegProv", "SetStringValue", objInParam)

' List OutParams
If objOutParams.ReturnValue = 0 Then
WScript.Echo "Out Parameters: "
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
Else
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
WScript.Echo "Not able to register"
WScript.Quit
End If

WScript.Echo "Creating New Key"

' Obtain an InParameters object specific' to the method.
Set objInParam = objShare.Methods_("CreateKey"). _
    inParameters.SpawnInstance_()
' Add the input parameters.
objInParam.Properties_.Item("hDefKey") =   2147483648
objInParam.Properties_.Item("sSubKeyName") =  "CLSID\{54D8502C-527D-43F7-A506-A9DA075E229C}\Inprocserver32\3.5.0.0"

' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("StdRegProv", "CreateKey", objInParam)

' List OutParams
If objOutParams.ReturnValue = 0 Then
WScript.Echo "Out Parameters: "
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
Else
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
WScript.Echo "Not able to Register"
WScript.Quit
End If


WScript.Echo "Creating String Values"
' Obtain an InParameters object specific
' to the method.
Set objInParam = objShare.Methods_("SetStringValue"). _
    inParameters.SpawnInstance_()


' Add the input parameters.
objInParam.Properties_.Item("hDefKey") =  2147483648
objInParam.Properties_.Item("sSubKeyName") =  "CLSID\{54D8502C-527D-43F7-A506-A9DA075E229C}\Inprocserver32\3.5.0.0"
objInParam.Properties_.Item("sValue") =  "System.Management.Instrumentation, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
objInParam.Properties_.Item("sValueName") =  "Assembly"

' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("StdRegProv", "SetStringValue", objInParam)

' List OutParams
If objOutParams.ReturnValue = 0 Then
WScript.Echo "Out Parameters: "
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
Else
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
WScript.Echo "Not able to Register"
WScript.Quit
End If


' Add the input parameters.
objInParam.Properties_.Item("hDefKey") =  2147483648
objInParam.Properties_.Item("sSubKeyName") =  "CLSID\{54D8502C-527D-43F7-A506-A9DA075E229C}\Inprocserver32\3.5.0.0"
objInParam.Properties_.Item("sValue") =  "System.Management.Instrumentation.ManagedCommonProvider"
objInParam.Properties_.Item("sValueName") =  "Class"

' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("StdRegProv", "SetStringValue", objInParam)

' List OutParams
If objOutParams.ReturnValue = 0 Then
Wscript.Echo "Out Parameters: "
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
Else
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
WScript.Echo "Not able to Register"
WScript.Quit
End If

' Add the input parameters.
objInParam.Properties_.Item("hDefKey") =  2147483648
objInParam.Properties_.Item("sSubKeyName") =  "CLSID\{54D8502C-527D-43F7-A506-A9DA075E229C}\Inprocserver32\3.5.0.0"
objInParam.Properties_.Item("sValue") =  "v2.0.50727"
objInParam.Properties_.Item("sValueName") =  "RuntimeVersion"

' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("StdRegProv", "SetStringValue", objInParam)

' List OutParams
If objOutParams.ReturnValue = 0 Then
WScript.Echo "Out Parameters: "
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
Else
WScript.Echo "ReturnValue: " & objOutParams.ReturnValue
WScript.Echo "Not able to Register"
WScript.Quit
End If
WScript.Echo "Registration of System.Management.Instrumentation was successful"

Else
WScript.Echo "System.Management.Instrumentation for .NET Framework 3.5 is already registered."
End If

関連項目

その他の技術情報

Assembly Registration Tool (Regasm.exe)

Send comments about this topic to Microsoft.

Copyright © 2007 by Microsoft Corporation. All rights reserved.