Windows 7 64ビットでDLLファイルを登録するにはどうすればよいですか?


101

次のコードを使用しようとしました:

cd c:\windows\system32
regsvr32.exe dllname.ax

しかし、これは私にはうまくいきません。Windows 7でDLLファイルを64ビットプロセッサで登録するにはどうすればよいですか?


この質問に「vb.net」というタグが付いているのを見て、なぜVB.NETで作成したDLLを登録しようとしているのか不思議に思う必要があります。で使用するにregsvr32は、DLLが関数DllRegisterServerとをエクスポートする必要がありDllUnregisterServerます。作成したDLLの大部分はまったく登録されていません。
コーディグレイ

12
機能しない、または役に立たないというのはどういう意味ですか?エラーメッセージが表示されますか?それは何と言いますか?
コーディグレイ

回答:


68

入力regsvr32 name.dll(上昇モードで実行!)プロンプトコマンドにキーを押し「入力します。」注name.dll登録することをDLLの名前に置き換えてください。たとえば、iexplore.dllを登録する場合は、と入力しregsvr32 iexplore.dllます。


5
regsvr32 ファイル名と拡張子が付いた.dllファイルのパス、 Enter
キー

202

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


13
なぜこれが選択された答えではないのですか?
Mike Devenney 2014

5
これは正解です。彼の元の投稿では構文が正しくなかったことを理解できますが、Rajkumarは、正しい構文を使用している場合でもエラーメッセージが表示されるとコメントしました。これは、誰かが1つではなく検索する場合の正解までに2つのステップを踏みます。最初に正解として選択された回答に、次にコメントチェーンをたどって、この投稿に到達します。
Rob

102

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です。
"


26
support.microsoft.comへのリンクを使用して+1は「間違っているように見えますが、それが機能する方法です」...信じられないほどのリンクなし
Trevor Boyd Smith

6
「高度なコマンドで」は非常に重要です!!
shindigo 2014年

4
system32またはsyswow64フォルダーにコピーする必要はないと思います。どこにいてもファイルを登録するだけです。
ニコス2017

30

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ドライバーを見たい場合。)


1
なぜそれが重要なのですか?regsvr32:理論的には、それはあなたが32ビットまたは64ビットのDLL登録されているかどうかを検出します、詳細について世話をしますstackoverflow.com/questions/18935163/...
Sk8erPeter

8

スタートメニューを開き、検索ボックスに「cmd」と入力します。Ctrl+ Shiftを押しながらEnterキーを押します。

これにより、管理者モードでコマンドプロンプトが実行されます。

今タイプ: regsvr32 MyComobject.dll


6

最後に私はソリューションが管理者としてCMDを実行して次のように書くことを見つけました

cd \windows\syswow64

次にこれを書きます

regsvr32 c:\filename.dll

回答があなたのお役に立てば幸いです


filename.dllをすでにsyswow64フォルダーにコピーしていて、コマンドプロンプトで作業ディレクトリをsyswow64に変更した場合、「regsvr32 c:\ filename.dll」の「c:\」は不要です。要するに、「regsvr32 c:\ filename.dll」は「regsvr32 filename.dll」を読み取る必要があります
Josh McKearin

6

DLLが32ビットの場合:

  1. DLLをC:\ Windows \ SysWoW64 \にコピーします
  2. 管理者特権のコマンド:%windir%\ SysWoW64 \ regsvr32.exe%windir%\ SysWoW64 \ namedll.dll

DLLが64ビットの場合:

  1. DLLをC:\ Windows \ System32 \にコピーします。
  2. 管理者特権のコマンド:%windir%\ System32 \ regsvr32.exe%windir%\ System32 \ namedll.dll

6

ここのすべてが間違った道として失敗していた。その後、私は昔のWin95時代のトリックを思い出しました。.dllが存在するプログラムフォルダーを開き、C:/ Windows / System32を開いてregsvr32までスクロールダウンし、プログラムフォルダーからdllをrgsrver32にドラッグアンドドロップします。ブーム、完了。


2
これは機能しますが、これを管理者として実行する必要がある場合は問題になる可能性があります。
Workabyte 2014年

3

エラーメッセージを知ることはかなり価値があります。情報を提供することを目的としていますが、私たちには何の意味もありません。推測しなければならないので、DLLは32ビットのDirectXフィルターだと思います。この場合、これは適切な行動方針である必要があります。

cd c:\windows\syswow64
move ..\system32\dllname.ax .
regsvr32.exe dllname.ax

UACが必要なレジストリアクセスを停止できないように、これは管理者特権のコマンドプロンプトで実行する必要があります。これについて、superuser.comで質問してください


3

私はこの非常に簡単な方法をテストしましたを完全に機能します。ただし、組み込みの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)ファイルとして保存します。次に、バッチファイルの上に-.dllor -.axファイルをドラッグアンドドロップするだけです。

  • UACで管理者としてバッチファイルを実行する機会がない場合は、手動で特権を昇格する必要がある場合があります(手順はWindows 7の場合です)。

    1. バッチファイルを右クリックします。
    2. を選択しCreate shortcutます。
    3. ショートカットを右クリックします。
    4. を選択しPropertiesます。
    5. Compatibilityタブをクリックします。
    6. ラベルの付いたボックスをチェックしますRun this program as administrator
    7. -.dllまたは-.axファイルを、バッチファイルの代わりに新しいショートカットの上にドラッグアンドドロップします。

それだけです。 UAC関連のフォローアップの失敗を防ぐために、COPY 代わりに 私は選びましたMOVE 。登録が成功したら、元のライブラリ(-.dll または )ファイルを削除する必要があり-.axます。

以前のパスによってシステムフォルダー(C:\Windows\System32 または )に作成されたコピーについて心配する必要はありません。コピーはC:\Windows\SysWOW64、バッチファイルを実行するたびに上書きされます。

間違ったバッチファイルを実行していない限り、適切なバッチファイルを実行する前に、間違ったシステムフォルダー(C:\Windows\System32 または C:\Windows\SysWOW64作成されたコピーを削除することをお勧めします

  • Windowsがディレクトリの場所を完全に修飾して、登録する適切なライブラリファイルを選択できるようにします。

    1. 正しいバッチファイルからシステムフォルダパスをコピーします
      • 64ビットの場合: C:\Windows\System32
      • 32ビットの場合: C:\Windows\SysWOW64
    2. 先行するように次の行に貼り付けます %nx1
      • 64ビットの場合: regsvr32 "C:\Windows\System32\%nx1"
      • 32ビットの場合: regsvr32 "C:\Windows\SysWOW64\%nx1"
        • 引用符内にパスを貼り付けます
        • %nx1システムフォルダーパスから分離する円記号を挿入します
      • または ...

  • このショットガンバッチファイルを実行します。

    1. 中止された登録プロセスのクリーンアップを実行します
      • ライブラリファイルによって完了した登録プロセスを元に戻します。
      • いずれかのシステムフォルダーに保存されているライブラリファイルのコピーを削除します。
      • この時点でバッチファイルを終了できるように一時停止します(必要に応じて別のファイルを実行します)。
    2. ライブラリファイルで64ビットインストールを試行する
      • ライブラリファイルをにコピーしますC:\Windows\System32
      • ライブラリファイルを64ビットプロセスとして登録します。
      • この時点でバッチファイルを終了できるように一時停止します。
    3. 64ビットインストールを元に戻す
      • ライブラリファイルの登録を64ビットプロセスとして元に戻します。
      • からライブラリファイルを削除しますC:\Windows\System32
      • この時点でバッチファイルを終了できるように一時停止します(必要に応じて別のファイルを実行します)。
    4. ライブラリファイルで32ビットインストールを試行する
      • ライブラリファイルをコピーします C:\Windows\SystemWOW64
      • ライブラリファイルを32ビットプロセスとして登録します。
      • この時点でバッチファイルを終了できるように一時停止します。
    5. ライブラリファイルの元の未登録のコピーを削除する

Run as administratorbatファイルのショートカットを作成すると、灰色になります。管理者としてログインしています。また、それはあります%nx1%n1
Jon Grah

3

Windows 7には違いがあります。管理者としてログオンしないと、としてプログラムを実行する場合と同じ権限が付与。

[スタート]-[すべてのプログラム]-[アクセサリ]に移動します。コマンドウィンドウを右クリックし、[管理者として実行]を選択します。次のようにしてdllを通常どおり登録します。regsrvr32 xxx.dll



3

あなたは実行する必要がcmd.exec:\windows\system32\ by administrator

コマンド: 登録解除用 * .dllファイル

regsvr32.exe /u C:\folder\folder\name.dll

登録用 * .dllファイル

regsvr32.exe C:\folder\folder\name.dll

2

regsvr32に関する混乱の一部は、64ビットウィンドウでは名前とパスが変更されていないが、64ビットDLLを登録するようになったことです。32ビットregsvr32は、64ビットアプリケーションを表すように見える名前であるSysWOW64に存在します。ただし、名前に含まれるWOW64は、Windows 64上のWindows、またはWindows 64ビット上のWindows 32ビットを指します。このように考えると、このコンテキストでは混乱しますが、名前は意味をなしています。

MSDNブログで元のソースを見つけることができませんが、このWikipediaの記事http://en.wikipedia.org/wiki/WoW64で参照されています


1

Win7 x64マシンでこの問題を修正した方法を次に示します。

1-エラーメッセージ:

「CoCreateInstance()が失敗しました。レジストリエントリCLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3}を確認して、管理者としてログインしていることを確認してください」

2-修正手順:

  • cmd.exeでcmd / RightMouseClickを開始/入力し、「管理者として実行」を選択します
  • 入力:regsvr32 / s C:\ Program Files \ Autodesk \ 3ds Max Design 2015 \ atl.dll regsvr32 / s C:\ Program Files \ Autodesk \ 3ds Max Design 2015 \ MAXComponents.dll
  • Win 7を再起動して、再びビジネスに戻ります!

お役に立てれば !

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.