回答:
32ビットまたは64ビットのdllであるかどうかは指定せず、エラーメッセージも含めませんが、このKB記事で説明されているのと同じ問題であると思います。Regsvr32.exeを実行するとエラーメッセージが表示される64ビットWindows
その記事からの引用:
この現象は、System32フォルダーのRegsvr32.exeファイルが64ビットバージョンであるために発生します。Regsvr32を実行してDLLを登録すると、デフォルトでは64ビットバージョンが使用されます。
その記事の解決策:
この問題を解決するには、%SystemRoot%\ Syswow64フォルダーからRegsvr32.exeを実行します。たとえば、次のコマンドを入力してDLLを登録します。
cd \windows\syswow64
regsvr32 c:\filename.dll
DLLが32ビットの場合:
\ WINDOWS \ SYSWOW64 \:CのDLLをコピーし
て上昇し、プロンプトのコマンドを実行します。%windir%\SysWoW64\regsvr32.exe %windir%\SysWoW64\namedll.dll
DLLが64ビットの場合:
CのDLLをコピー:\ WINDOWS \ System32に\が
で昇格コマンドプロンプト:%windir%\System32\regsvr32.exe %windir%\System32\namedll.dll
私はそれが間違った方法であるように見えることを知っています、しかしそれはそれが機能する方法です。見る:
http://support.microsoft.com/kb/249873
引用:「注64ビットバージョンのWindowsオペレーティングシステムには、2つのバージョンのRegsv32.exeファイルがあります
。64ビットバージョンは%systemroot%\です。 System32 \regsvr32.exe。32
ビットバージョンは%systemroot%\ SysWoW64 \ regsvr32.exeです。
"
x64システムでは、system32は64ビット用であり、syswow64は32ビット用です(別の回答で述べられているように逆ではありません)。WOW(Windows on Windows)は、64ビットサブシステムで実行される32ビットサブシステムです。
それはネーミング用語の混乱であり、混乱させるだけの役目を果たしますが、それはそうです。
もう一度...
syswow64は32ビットであり、64ビットではありません。
system32は64ビットであり、32ビットではありません。
これらの各ディレクトリにはregsrv32があります。1つは64ビットで、もう1つは32ビットです。これは、odbcad32などと同じ処理です。(64ビットのsystem32のデフォルトのodbcad32で表示されない32ビットのODBCドライバーを見たい場合。)
regsvr32
:理論的には、それはあなたが32ビットまたは64ビットのDLL登録されているかどうかを検出します、詳細について世話をしますstackoverflow.com/questions/18935163/...
スタートメニューを開き、検索ボックスに「cmd」と入力します。Ctrl+ Shiftを押しながらEnterキーを押します。
これにより、管理者モードでコマンドプロンプトが実行されます。
今タイプ: regsvr32 MyComobject.dll
最後に私はソリューションが管理者としてCMDを実行して次のように書くことを見つけました
cd \windows\syswow64
次にこれを書きます
regsvr32 c:\filename.dll
回答があなたのお役に立てば幸いです
ここのすべてが間違った道として失敗していた。その後、私は昔のWin95時代のトリックを思い出しました。.dllが存在するプログラムフォルダーを開き、C:/ Windows / System32を開いてregsvr32までスクロールダウンし、プログラムフォルダーからdllをrgsrver32にドラッグアンドドロップします。ブーム、完了。
エラーメッセージを知ることはかなり価値があります。情報を提供することを目的としていますが、私たちには何の意味もありません。推測しなければならないので、DLLは32ビットのDirectXフィルターだと思います。この場合、これは適切な行動方針である必要があります。
cd c:\windows\syswow64
move ..\system32\dllname.ax .
regsvr32.exe dllname.ax
UACが必要なレジストリアクセスを停止できないように、これは管理者特権のコマンドプロンプトで実行する必要があります。これについて、superuser.comで質問してください
私はこの非常に簡単な方法をテストしましたを完全に機能します。ただし、組み込みのAdministratorアカウントを使用しているため、昇格された特権を取得する必要はありません。
次のバッチファイルを使用すると、ユーザーはシステムフォルダーの内外にファイルを移動する必要がなくなります。また、適切なバージョンのを適用するかどうかはWindowsに任されていますRegsvr32
。
指示:
登録するライブラリ(-.dll
または-.ax
)ファイルが含まれているフォルダーで、新しいテキストファイルを開き、以下のいずれかのルーチンに貼り付けます。
echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 64-BIT SYSTEMS
copy %1 C:\Windows\System32
regsvr32 "%nx1"
echo END BATCH FILE
pause
echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 32-BIT SYSTEMS
copy %1 C:\Windows\SysWOW64
regsvr32 "%nx1"
echo END BATCH FILE
pause
新しいテキストファイルをバッチ(-.bat
)ファイルとして保存します。次に、バッチファイルの上に-.dll
or -.ax
ファイルをドラッグアンドドロップするだけです。
UACで管理者としてバッチファイルを実行する機会がない場合は、手動で特権を昇格する必要がある場合があります(手順はWindows 7の場合です)。
Create shortcut
ます。Properties
ます。Compatibility
タブをクリックします。Run this program as administrator
。-.dll
または-.ax
ファイルを、バッチファイルの代わりに新しいショートカットの上にドラッグアンドドロップします。それだけです。 UAC関連のフォローアップの失敗を防ぐために、COPY
代わりに 私は選びましたMOVE
。登録が成功したら、元のライブラリ(-.dll
または )ファイルを削除する必要があり-.ax
ます。
以前のパスによってシステムフォルダー(C:\Windows\System32
または )に作成されたコピーについて心配する必要はありません。コピーはC:\Windows\SysWOW64
、バッチファイルを実行するたびに上書きされます。
間違ったバッチファイルを実行していない限り、適切なバッチファイルを実行する前に、間違ったシステムフォルダー(C:\Windows\System32
または C:\Windows\SysWOW64
)に作成されたコピーを削除することをお勧めします。
Windowsがディレクトリの場所を完全に修飾して、登録する適切なライブラリファイルを選択できるようにします。
C:\Windows\System32
C:\Windows\SysWOW64
%nx1
regsvr32 "C:\Windows\System32\%nx1"
regsvr32 "C:\Windows\SysWOW64\%nx1"
%nx1
システムフォルダーパスから分離する円記号を挿入しますこのショットガンバッチファイルを実行します。
C:\Windows\System32
。C:\Windows\System32
。C:\Windows\SystemWOW64
Run as administrator
batファイルのショートカットを作成すると、灰色になります。管理者としてログインしています。また、それはあります%nx1
か%n1
?
Windows 7には違いがあります。管理者としてログオンしないと、としてプログラムを実行する場合と同じ権限が付与。
[スタート]-[すべてのプログラム]-[アクセサリ]に移動します。コマンドウィンドウを右クリックし、[管理者として実行]を選択します。次のようにしてdllを通常どおり登録します。regsrvr32 xxx.dll
エラーコード0x80040201が表示された場合は、エラーコード0x80040201でDllRegisterServerが失敗したことを確認してください。ただし、コマンドプロンプトを[管理者として実行]として開いてください。
regsvr32に関する混乱の一部は、64ビットウィンドウでは名前とパスが変更されていないが、64ビットDLLを登録するようになったことです。32ビットregsvr32は、64ビットアプリケーションを表すように見える名前であるSysWOW64に存在します。ただし、名前に含まれるWOW64は、Windows 64上のWindows、またはWindows 64ビット上のWindows 32ビットを指します。このように考えると、このコンテキストでは混乱しますが、名前は意味をなしています。
MSDNブログで元のソースを見つけることができませんが、このWikipediaの記事http://en.wikipedia.org/wiki/WoW64で参照されています
Win7 x64マシンでこの問題を修正した方法を次に示します。
「CoCreateInstance()が失敗しました。レジストリエントリCLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3}を確認して、管理者としてログインしていることを確認してください」
お役に立てれば !
regsvr32
は、DLLが関数DllRegisterServer
とをエクスポートする必要がありDllUnregisterServer
ます。作成したDLLの大部分はまったく登録されていません。