En raison des restrictions (non pertinentes pour cette question) de l'implémentation OpenGL dans Virtualbox (uniquement la version 1.1 d'OpenGL est disponible, mais j'ai besoin d'au moins la version 2.0), j'ai décidé d'utiliser l'implémentation logicielle sous la forme d'une DLL (nommée opengl32.dll ) qui peut être téléchargé à partir d'ici: ftp://ftp.blender.org/sergey/softwaregl/
Une façon de le faire consiste à placer le fichier opengl32.dll directement dans le même répertoire que le fichier exécutable.
Ma question est la suivante: quel est le meilleur moyen de rendre cette implémentation logicielle disponible pour tous les programmes sans copier les fichiers DLL tout autour.
Important: Toutes les applications 32 bits ont besoin du fichier opengl32.dll à partir du répertoire / win32 / de ce serveur FTP, alors que toutes les applications 64 bits ont besoin du fichier opengl32.dll (même nom, mais il est un autre fichier!) De la répertoire / win64 / . Ainsi, si j’ai une application 32 bits et une application 64 bits dans un même répertoire sur mon ordinateur, la solution consistant à placer la DLL dans le même dossier ne fonctionne pas: il n’est pas possible d’avoir deux fichiers différents portant le même nom dans le même dossier. annuaire.
Réponses:
Vous devez mettre votre 64 bits
dll
àc:\Windows\System32
et votre 32 bitsdll
àc:\Windows\SysWOW64
.Notez que sous Windows 10, les
OpenGL32.dll
fichiers d' origine ne sont accessibles que par l'TrustedInstaller
utilisateur. Donc, pour les remplacer, vous devez changer la propriété de ces fichiersAdministrator
. Pour moi, il n'était pas possible de le faire en utilisant une interface utilisateur, mais l'approche en ligne de commande a fonctionné. Pour ce faire, exécutez le enCommand Prompt
tant qu'administrateur. Ensuite, utilisez les commandes suivantes pour supprimer lesOpenGL32.dll
fichiers d' origine :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
Pareil pour le
C:\Windows\SysWOW64
répertoire.Après cela, copiez simplement le vôtre
OpenGL32.dll
dans ces emplacements en tant qu'administrateur.la source
La solution habituelle consiste à avoir deux sous-dossiers comme celui-ci:
Le programme
.exe
est placé dans le dossier principal, mais n'est pas appelé directement. Au lieu de cela, il est lancé via un.bat
fichier qui vérifie si Windows est en 32 ou 64 bits et démarre.exe
dans le contexte du sous-dossier correspondant. Une DLL est recherchée dans plusieurs dossiers, dont le dossier actuel.Voir le fichier post- traitement pour vérifier le système d'exploitation 64 bits ou 32 bits .
Si vous craignez que le
.bat
fichier n'apparaisse comme une fenêtre carrée noire, vous pouvez le démarrer de la manière masquée, comme décrit dans l'article Exécuter un fichier de commandes de manière totalement masquée . Un programme graphique démarrant à partir d'un tel fichier de commandes masqué ne sera pas lui-même masqué.la source
cd Win32DLL
oucd Win64DLL
avant d'exécuter..\prog.exe
. Les chemins doivent être écrits plus explicitement que cette version courte.L'utilisation du
KnownDLL
mécanisme pourrait aider. Les DLL connues ignorent la recherche du système de fichiers et sont chargées à partir d'un seul répertoire fixe. De manière pratique, il existe un répertoire KnownDLL pour les processus 64 bits et un répertoire KnownDLL32 pour les processus 32 bits.la source
opengl32.dll
à cette liste, vous pouvez indiquer à Windows où trouveropengl32.dll
sur le disque.