regsvr32コマンドで互換性がない可能性があります。というエラーが出る時の確認。【Windows】

RegSvr32エラー-互換性がない可能性があります_eyecatch

Windowsのコマンドプロンプトで「regsvr32」を使いモジュールを登録しようとしたところ“モジュール"xxx"は、実行しているWindowsのバージョンと互換性がない可能性があります。モジュールがx86(32ビット)バージョンまたはx64(64ビット)バージョンのregsvr32と互換性があることを確認してください。”というエラーが出ました。

初めはエラーの原因が良く分からなかったのですが、どうやら作業ディレクトリやモジュールのパスが間違っている時にもこのエラーが出るようです。

初見時は意味不明だったので、この記事で解決の糸口を共有したいと思います。

今回は拡張子が「.ocx」のモジュールでこのエラーが出ましたが「.dll」などの他の拡張子の場合でも同じエラーが出ることがあります。

regsvr32で互換性がない可能性がありますというエラーが出た時の確認

先日アプリケーション拡張(.dll)やActiveXコントロール(.ocx)を登録、登録解除する時に使用する「regsvr32コマンド」を使って、mscomctl.ocxというモジュールを登録しようとしたところ以下のようなエラーが出ました。

RegSvr32エラー-互換性がない可能性があります_001

regsvr32コマンドでエラーが出た画面

モジュール"mscomctl.ocx"は、実行しているWindowsのバージョンと互換性がない可能性があります。モジュールがx86(32ビット)バージョンまたはx64(64ビット)バージョンのregsvr32と互換性があることを確認してください。

エラーの内容は分かりますが、今回登録しようとしたmscomctl.ocxは32ビットのもので、しかも以前に別のパソコン(64ビット)にも入れたことがあるモジュールだったので解決するのに苦労しました。のでこの時の内容を記事にします。

色々試した結果、モジュール(mscomctl.ocx)の方には何の問題もなく、ただ単にregsver32実行時のパス(作業ディレクトリ)を間違えていただけでした。

では早速詳しく見ていきましょう・w・

エラーが出る時はパスを確認する

アプリケーション拡張(.dll)やActiveXコントロール(.ocx)をregsver32で登録する時は以下のどちらかのフォルダにモジュールを配置することが殆どだと思います。

  • C:¥Windows¥Sytem32
  • C:¥Windows¥SysWOW64

32bitなら「System32」へ...64bitなら「SysWOW64」へ...と良く書かれていますね。
ここら辺の勘違いが多いのはこの記事では置いておいて、このフォルダへモジュールを配置したとして進めていきます。

配置場所についても詳しくは書きませんが、どちらのフォルダに配置すれば良いのか分からないなら、両方のフォルダに配置してしまっても特に問題は起こりません。
同じモジュールが「System32」と「SysWOW64」に存在する事もありますので...

モジュールを配置したあと、regsvr32で「互換性があることを確認してください。」という旨のエラーが出た時にまず確認していただきたいのが、コマンドプロンプトを管理者権限で実行しているかどうかです。特に「System32」を使っているなら...

スポンサーリンク

regsver32コマンドの実行は管理者権限で行う

エラーの直接の原因は管理者権限ではなく、作業ディレクトリにあります。

regsvr32コマンド自体は別に管理者でなくても実行することが可能です。
ただ、Windowsのデスクトップからコマンドプロンプトを普通に起動した場合、作業ディレクトリが「C:¥Users¥ユーザー名」になることが厄介なのです。

具体的なコマンドで例えると、

 command
C:¥Users¥ユーザー名>regsver32 mscomctl.ocx

これではエラーが出ます。(記事冒頭の画像)

ポイント

登録したいmscomctl.ocxというモジュールは「System32」に配置しています。

続いてコマンドプロンプトを管理者権限で実行してみます。

RegSvr32エラー-互換性がない可能性があります_002

コマンドプロンプトを「管理者として実行」する

管理者権限で実行するには、検索欄に「cmd」と打ち込み、コマンドプロンプトが出たら「管理者として実行」を押せばOKです。
(コマンドプロンプトを右クリックして「管理者として実行」を選んでもOKです。)

先ほどと同じコマンドregsver32 mscomctl.ocxを叩いてみましょう。

RegSvr32エラー-互換性がない可能性があります_003

成功しました。

この時のコマンドのパスは、

 command
C:¥WINDOWS¥system32>regsver32 mscomctl.ocx

という感じです。コマンドプロンプトを管理者権限で実行すると、作業ディレクトリが「C:¥WINDOWS¥system32」からスタートするのが今回のミソです。

つまりregsvr32はパソコンに登録するモジュールがあるフォルダを作業ディレクトリにしてから実行しないとダメという事です...
今回出たエラーには“互換性の確認”って書いてるけど。全然違うじゃん。

更にシンプルに言うと「C:¥Windows¥Sytem32」にregsvr32で登録したいモジュールを配置している場合は、コマンドプロンプトを管理者権限で実行するだけで上手くいくはずです。

SysWOW64にモジュールを配置した場合

続いて、登録したいモジュールを「C:¥Windows¥SysWOW64」に配置した場合です。
最近は64ビットのOSが主流なので「SysWOW64」を使うことが多いでしょう。

この場合も先ほど同様、regsver32の実行前にコマンドプロンプトの作業ディレクトリを「C:¥Windows¥SysWOW64」に変更してからregsver32を実行すればOKです。

つまり、regsver32を実行する前に

 command
cd C:\Windows\SysWOW64

という風にcdコマンドで作業ディレクトリを「SysWOW64」に変更すればOK!

RegSvr32エラー-互換性がない可能性があります_004

SysWOW64内に登録したいmscomctl.ocxを配置済み

成功しました。

cdコマンドを使わずにパスを指定してもOK

先ほどは、分かりやすいようにcdで作業ディレクトリを変更してからregsver32を実行しましたがcdを使わなくてもできます。

 php.ini
C:\Windows\SysWOW64\regsvr32 mscomctl.ocx

こんな感じにregsvr32の前にモジュールまでのパスを書けば一発でいけます。

RegSvr32エラー-互換性がない可能性があります_005

とにかくコマンドプロンプトの作業ディレクトリ、モジュールのパスが大切です。

エラーが解決できたコマンド例

長くなったので最後にモジュールの配置場所とコマンドの対応をまとめておきます。

Sytem32フォルダ内に配置した場合

C:¥Windows¥Sytem32の中にregsvr32で登録したいモジュール(mscomctl.ocx)を配置している場合は、コマンドプロンプトを管理者権限で実行してから下のコマンドを実行すればOKでした。

 command
regsver32 mscomctl.ocx

SysWOW64フォルダ内に配置した場合

C:¥Windows¥SysWOW64の中にregsvr32で登録したいモジュール(mscomctl.ocx)を配置した時は以下のコードです。

 command
cd C:\Windows\SysWOW64
regsvr32 mscomctl.ocx

または、

 command
C:\Windows\SysWOW64\regsvr32 mscomctl.ocx

ポイントはregsvr32を実行する作業ディレクトリです。



まとめ

以上、Windowsのコマンドプロンプトでregsvr32コマンドを実行した時に「モジュール"xxx"は、実行しているWindowsのバージョンと互換性がない可能性があります。モジュールがx86(32ビット)バージョンまたはx64(64ビット)バージョンのregsvr32と互換性があることを確認してください。」というエラーが出てしまう時の確認でした。

もちろんエラーの通りモジュールに本当に互換性がない場合や、モジュール本体が壊れている可能性もあるとは思いますが、大体は作業ディレクトリとパスが原因になると思います。

-パソコン
-

site-logo
ありがとうございました!
良かったらシェアしてネ・w・
当サイトはピンバックを受け付けます。
  • この記事を書いた人
ザキ

ザキ

X:@sologaku

プログラミングに興味があり情報系の大学を卒業。

新卒で社会人になるも数年で退職し今はフリーランスとして生きています。

少しでも誰かの役に立てれば...と思い、当サイトでIT関係のハウツーを発信しています。


ソロ学運営者:ザキの自己紹介

© 2020 sologaku