時々、Windowsユーザーである場合、おそらくregsvr32.exe
ユーティリティを実行してDLLを「登録」する必要があったことがあるかもしれません。その場合、おそらく裏側で何が起こっているかを正確に把握していなかったかもしれません。この難解なユーティリティは、多くのWindowsアプリケーションで使用されるObject Linking and Embedding(OLE)コントロールを管理するために使用されます。
しかし、OLEコントロールとは具体的には何であり、なぜOLEコントロールを登録したいのでしょうか?このチュートリアルでは、regsvr32.exe
ユーティリティを使用してOLEコントロールをインストール、アンインストール、登録、または登録解除するためのさまざまな方法を学びます。
前提条件
regsvr32.exe
ユーティリティを実行するには、以下の要件を満たしていることを確認してください:
- regsvr32.exeユーティリティはほとんどのWindowsバージョンに組み込まれているため、管理者アカウントを持つWindowsコンピューターが必要です。
- このチュートリアルに含まれるPowerShellスクリプトを利用するには、PowerShell 7が必要です。
OLEコントロールとは何ですか?
regsvr32.exe
ユーティリティの使用方法を学ぶ前に、このツールが管理するOLEコントロールについて基本的な理解を持っている必要があります。
OLEコントロールは、文書や他のオブジェクトへの埋め込みやリンクを容易にするために開発されたWindows固有の技術です。この技術は年月を経て進化し、さまざまなコンポーネントがOLE技術をベースに構築されました。
おそらく、Component Object Model (COM)、Distributed Component Object Model (DCOM)、またはActiveXコントロールについて聞いたことがあるかもしれません。これらの技術のそれぞれは、多言語で書かれた機能に対する標準インターフェースを定義するOLE技術をベースに構築されています。
ActiveXは非推奨ですが、Windows 10のInternet Explorerを介してまだ利用可能ですが、Microsoft Edgeでは利用できません。
OLEコントロールの登録
regsvr32.exe
ユーティリティの動作が理解できたので、OLEコントロールを登録する準備が整いました。登録するためのいくつかのコマンドバリアントがありますので、以下から1つのコマンドバリアントを選択するか、それぞれのコマンドを試してみてください。
PowerShellまたはWindowsコマンドプロンプトを介してOLEコントロールを登録することができます。どちらの方法でも、コントロールが適切に登録されるように、コマンドラインを管理者として実行していることを確認してください。
GUI結果の表示
DLL を regsvr32
で登録する場合、最も単純な使用例では、ツールに DLL のパスを渡す必要があります。デフォルトでは、regsvr32
は成功(または失敗)を示すポップアップを表示します。DLL を登録するには、以下に示すように DLL の名前または完全なパスを指定します。
以下のコマンドを実行すると、x64 インスタンスの場合はターゲットの OLE コントロールのための HKEY_CLASSES_ROOT\CLSID キー、または x86 インスタンスの場合は HKEY_CLASSES_ROOT\WOW6432Node\CLSID に必要なレジストリクラスが作成されます。
成功すると、DllRegisterServer
が成功したことを示す GUI 結果が表示されます。

OLE コントロールを登録する場合、
regsvr32.exe
はシステムの検索パスを適用します。そのため、そのパスの外の特定のファイルを登録する必要がある場合は、ファイルへの絶対パスを指定するのが最適です。
OLE コントロールをサイレントに登録する
コマンドを実行する際、GUI プロンプトが表示されるのは常に望ましくない場合があります。OLE コントロールを登録する際に GUI プロンプトを抑制する方法について説明します。
GUI プロンプトを抑制するには、regsvr32
を実行し、DLL 名(msxml3.dll
)の後に OLE コントロールをサイレントに登録するための /s
スイッチを指定します。このコマンドの唯一の欠点は、エラーメッセージも抑制されることです。
未公開のスイッチ、
/e
が存在し、GUI 成功メッセージのみを抑制し、GUI エラーメッセージを表示します。賢いですね!

OLEコントロールの登録とインストールアクションの指定
OLE登録のためにDLLを指定するとき、単にDllRegisterServer
メソッドを呼び出していますが、登録後にアクションを実行する必要がある場合もあります。そのためには、/i
パラメータを指定できます。
たとえば、入力文字列(U
)を/i
パラメータに渡すことで、DllInstall
メソッドとDllRegisterServer
メソッドが同時に呼び出されます。
DllInstall
メソッドを使用すると、regsvr32.exe
ユーティリティがDLLを複数の方法でインストールし、1つのDLLに対して複数のアクションが呼び出されます。

DllRegisterServer
メソッドを呼び出さずにインストールアクションを指定する
たとえば、OLEコントロールを再登録せずにインストールしたい場合は、次のコマンドを実行します。
上記のコマンドは、shell32.dll
DLLに対してDllRegisterServer
メソッドを呼び出さないように/n
パラメータを使用して、インストールメソッドDllInstall
を実行します。

regsvr32.exe
を使用してOLEコントロールを登録解除する
regsvr32.exe
を使用してOLEコントロールを登録解除するOLEコントロールの登録にエラーがなく完了した場合は、安心です。しかし、他のコントロールと競合している場合は、OLEコントロールをアンインストールする必要がある場合があります。幸いにも、regsvr32.exe
はOLEコントロールの登録解除とアンインストールの機能を提供しています。
登録解除およびコントロールのアンインストールを行うには、regsvr32.exe
を実行し、/u
パラメータを渡してOLEコントロールを登録解除します。以下のGUIの結果で、msxml3.dll DLL が正常にアンインストールされました。
登録解除と同時にアクションを実行するには、アクション文字列 (
U
) を/i
パラメータに渡します。その後、regsvr32
コマンドはそのアクションをアンインストールとしてDllInstall
メソッドを呼び出します。例えば、regsvr32 /i:action /U msxml3.dll
のようにです。

regsvr32.exe
のエラー処理
OLEコントロールの登録は成功したが、登録コマンドがエラーに遭遇した場合はどうなるでしょうか?コントロールを管理しようとすると、いくつかのエラーが発生することがあります。これらのメッセージは時には難解ですが、下記で原因を理解するのに役立ちます。
FAIL_ARGS | ⦿ “Unrecognized flag” ⦿ “Extra argument on command line” ⦿ “This command is only valid when an OLE Custom Control project is open” ⦿ “No DLL name specified” |
Implies that a command-line argument was incorrect. |
FAIL_OLE | “OleInitialize failed” | Implies that there was an error in properly initializing the OLE subsystem. |
FAIL_LOAD | “LoadLibary(<dllname) failed>“ | This can be a host of reasons such as a dependent library missing, the DLL is inaccessible due to permissions, or the file is missing. |
FAIL_ENTRY | ⦿ ” was loaded, but the entry point was not found. does not appear to be an .DLL or .OCX file” ⦿ ” was loaded, but the entry point was not found. may not be exported or a corrupt version may be in memory. Consider using PView to detect and remove it.” ⦿ ” was loaded, but the entry point was not found. may not be exported, or a corrupt version may be in memory. Consider using WPS to detect and remove it.” |
Implies that the entry point in the DLL, or function name, is missing. |
FAIL_REG | “<DLLEntryPoint> in <DLLName> failed“ | Implies that despite all the prior steps completing the system still failed to fully register the DLL. |
regsvr32.exe
ユーティリティの拡張とPowerShell
regsvr32.exe
はGUI出力を好むため、自動化は難しい場合があります。この課題を解消するには、regsvr32.exe
ユーティリティをPowerShell関数でラップすることができます。PowerShell関数を作成することで、regsvr32.exe
をネイティブなPowerShellコマンドレットとして実行できます。
例として、以下はInvoke-RegSvr32
PowerShell関数です。この関数はregsvr32
ユーティリティを呼び出し、PowerShellを使用して終了コードを取得し、それに応じて処理します。事前に引数の検証を適用することで、エラーを完全に回避することさえできます!
以下の関数を試すには、新しいPowerShellコンソールを開き、コードをコピーして貼り付けてください。それから、以下に示すように関数を呼び出すことができます。
以下は、Invoke-RegSvr32
関数の使用例のいくつかです。

Invoke-RegSvr32
PowerShell Command結論
これで、DLL の登録と登録解除、およびエラーの処理について学びました。 regsrv32.exe
は日常のタスクであまり使用されないかもしれませんが、DLL を登録または登録解除する必要がある特定の状況があります。
さらに、これを拡張して、PowerShell をさらに多くのチェックやエッジケースに対応させることができます。 CLSID
レジストリの場所に登録されたコントロールをリストするための PowerShell 関数さえ作成できます!