web-dev-qa-db-ja.com

DLLをすべてのWindowsプログラムで使用できるようにする(win10 pro x64)

VirtualboxでのOpenGL実装の(この質問には関係ありません)制限のため(OpenGLバージョン1.1のみが利用可能ですが、少なくともバージョン2.0が必要です)DLL)の形式でソフトウェア実装を使用することにしました=(名前付きopengl32.dll)ここからダウンロードできます: ftp://ftp.blender.org/sergey/softwaregl/

これを行う1つの方法は、ファイルopengl32.dllを実行可能ファイルと同じディレクトリに直接配置することです。

私の質問は、DLLファイルをコピーせずに、このソフトウェア実装をすべてのプログラムで利用できるようにするための最良の方法は何ですか。

重要なお知らせ:すべての32ビットアプリケーションには、このFTPサーバーのディレクトリ / win32 / からのファイルopengl32.dllが必要です。すべての64ビットアプリケーションにはファイルopengl32.dll(同じ名前ですが、別のファイルです!)ディレクトリから / win64 / 。したがって、コンピュータの同じディレクトリに1つの32ビットアプリケーションと1つの64ビットアプリケーションがある場合、DLLを同じフォルダに入れるという解決策は機能しません。2つにすることはできません。同じディレクトリ内の同じ名前の異なるファイル。

1
ilya

64ビットのdllc:\Windows\System32に、32ビットのdllc:\Windows\SysWOW64に配置する必要があります。

Windows 10では、元のOpenGL32.dllファイルにはTrustedInstallerユーザーのみがアクセスできることに注意してください。したがって、それらを置き換えるには、それらのファイルの所有権をAdministratorに変更する必要があります。私にとっては、UIを使用してそれを行うことはできませんでしたが、コマンドラインアプローチは機能しました。これを行うには、管理者としてCommand Promptを実行します。次に、次のコマンドを使用して、元のOpenGL32.dllファイルを削除します。

takeown /F C:\Windows\System32\OpenGL32.dll /A icacls C:\Windows\System32\OpenGL32.dll /T /grant administrators:F move C:\Windows\System32\OpenGL32.dll C:\Windows\System32\OpenGL32.dll.orig

C:\Windows\SysWOW64ディレクトリについても同じです。

その後、管理者として自分のOpenGL32.dllをそれらの場所にコピーするだけです。

2
igagis

通常の解決策は、次のような2つのサブフォルダーを作成することです。

Installation folder
    |--- Win32 DLL
    |--- Win64 DLL

プログラムの.exeはメインフォルダに配置されますが、直接呼び出されることはありません。代わりに、Windowsが32ビットか64ビットかをチェックする.batファイルを介して開始され、一致するサブフォルダーのコンテキストで.exeを開始します。 DLLはいくつかのフォルダーで検索され、そのうちの1つは現在のフォルダーです。

投稿を参照してください 64ビットまたは32ビットOSをチェックするためのバッチファイル

.batファイルが黒い四角いウィンドウとして表示されるのが心配な場合は、投稿で説明されているように非表示で開始できます 完全に非表示の方法でバッチファイルを実行します 。このような非表示のバッチファイルから起動されたGUIプログラム自体は非表示になりません。

1
harrymc

KnownDLLメカニズムを使用すると役立つ場合があります。既知のDLLはファイルシステム検索をバイパスし、代わりに単一の固定ディレクトリからロードされます。便利なことに、64ビットプロセス用に1つのKnownDLLディレクトリと32ビットプロセス用に1つのKnownDLL32ディレクトリがあります。

0
MSalters