web-dev-qa-db-ja.com

32ビットDLL Server 2008では「互換性がない可能性があります」が、Server 2003では機能する

32ビットCOM DLLおよび64ビットCOM DLL( my以前のquestion )。Windows 7マシンに両方を登録すると、両方が正常に登録されます。WindowsServer 2003マシンに両方を登録すると、両方が正常に登録されます。

しかし、Windows Server 2008 R2標準SP1マシンでDLLを登録しようとすると、64ビットDLL登録は成功しましたが、32-bitDLLはメッセージで失敗します(sic):

モジュール ""%1 ""は、実行しているWindowsのバージョンと互換性がない可能性があります。モジュールがregsvr32.exeのx86(32ビット)またはx64(64ビット)バージョンと互換性があるかどうかを確認します。

32ビットDLLはWS2003およびWin7と互換性がありますが、WS2008は互換性がないと思います。それは意味がありません。

何が起きているのでしょうか?

20

Regsvr32.exeのバージョンは、登録しようとしているDLLの32/64ビットに一致する必要があります。 64ビットregsvr32は32ビットdllをロードできません。逆も同様です。

%systemroot%\ SysWoW64\regsvr32.exeにあるregsrv32の32ビットバージョンを明示的に呼び出す必要がある場合があります。

http://support.Microsoft.com/kb/24987 から

Regsvr32.exeは、Microsoft Internet Explorer 3.0以降のバージョン、Windows 95 OEM Service Release 2(OSR2)以降のバージョン、およびWindows NT 4.0 Service Pack 5(SP5)以降のバージョンに含まれています。 Regsvr32.exeは、System(Windows Me/Windows 98/Windows 95)またはSystem32(Windows NT/Windows XP/Windows Vista/Windows 7)フォルダーにインストールされます。

メモ64ビットバージョンのWindowsオペレーティングシステムには、Regsv32.exeファイルの2つのバージョンがあります。

  • 64ビットバージョンは%systemroot%\ System32\regsvr32.exeです。
  • 32ビットバージョンは%systemroot%\ SysWoW64\regsvr32.exeです。

Regsvr32.exeの使用法RegSvr32.exeには、次のコマンドラインオプションがあります。Regsvr32 [/ u] [/ n] [/ i [:cmdline]] dllname

/ u-サーバーの登録解除/ i-DllInstallを呼び出して、オプションの[cmdline]を渡します。/uとともに使用すると、dll uninstall/nが呼び出されます-DllRegisterServerを呼び出さないでください。このオプションは、/ i/s –サイレントで使用する必要があります。メッセージボックスを表示しない(Windows XPおよびWindows Vista)で追加)Regsvr32.exeを使用すると、コンポーネントをロードしてDLLSelfRegister関数を呼び出します。この試行が成功すると、Regsvr32.exe成功を示すダイアログボックスが表示されます。試行が失敗した場合、Regsvr32.exeはエラーメッセージを返します。これにはWin32エラーコードが含まれる場合があります。詳細については、次の記事番号をクリックしてマイクロソフトサポート技術情報を参照してください。 WinInetエラーコード(12001〜12156)

14
nullforce

これはあなたのケースでは問題ではないかもしれませんが、同じエラーメッセージで検索することでこの質問を見つけた他の人にとって有用かもしれません:

同様の問題がありました。RegSvr32の32ビット版または64ビット版のいずれにも登録できないDLL。 DLL Dependency Walker(depends.exe、 http://www.dependencywalker.com/ )をロードすると、はるかに有用なメッセージが表示されました。

エラー:少なくとも1つのファイルが32ビットまたは64ビットのWindowsモジュールではありませんでした。

モジュールリストのCPU列をスキャンして、問題のあるモジュールを特定しました。 (私の場合、「DOSまたはPE署名が見つかりません。このファイルは有効な32ビットまたは64ビットのWindowsモジュールではありません。」)

道徳:Dependency Walkerは、RegSvr32.exeよりも有用なエラーメッセージを表示する場合があります。

6
Dan K

Dllをc:\ windows\syswow64 \ディレクトリに移動して登録し(system32ディレクトリでは機能しません)、明示的にsyswow64\regsvr32を呼び出します。たとえば、

c:\ windows\syswow64\regsvr32 yourdll.dll

btw c:\ windows\syswow64\regsvr32 c:\ windows\syswow64\yourdll.dllを呼び出すと機能しません

3
Rasterman

私は同じ問題を抱えていますが、コマンドで解決します

CD\windows\syswow64 regsvr32 c:\ filename。 dll

1
madurama

管理者としてコマンドプロンプトを実行すると、問題が修正されました。

1
user5364342

SysInternalsの Process Monitor を使用します。

1 「プロセス名」= regsvr32.exeでフィルタリングします。 Filter

2。正しいバージョンのregsvr32.exeからdllを登録してみてください(32ビットバージョンはSysWow64フォルダーにあります)

3。プロセスモニターは、コンピューターで発生するすべてをトレースします。

4。最初にレジストリイベントを削除して分析を開始します(今のところ)enter image description here

5。魔女dllが見つかりましたが見つからないのを見ることができるかもしれません。

ここで、必要なdllの一部を確認できるThreed32.ocxのregsvr32.exeの(非常に)部分的なscreenShot enter image description here

6。あなたの仕事は始まったばかりです。今から。

0
Guish