Rendre une DLL disponible pour tous les programmes Windows (win10 pro x64)

1

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.

il y a
la source

Réponses:

2

Vous devez mettre votre 64 bits dllà c:\Windows\System32et votre 32 bits dllà c:\Windows\SysWOW64.

Notez que sous Windows 10, les OpenGL32.dllfichiers d' origine ne sont accessibles que par l' TrustedInstallerutilisateur. Donc, pour les remplacer, vous devez changer la propriété de ces fichiers Administrator. 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 en Command Prompttant qu'administrateur. Ensuite, utilisez les commandes suivantes pour supprimer les OpenGL32.dllfichiers 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\SysWOW64répertoire.

Après cela, copiez simplement le vôtre OpenGL32.dlldans ces emplacements en tant qu'administrateur.

igagis
la source
1

La solution habituelle consiste à avoir deux sous-dossiers comme celui-ci:

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

Le programme .exeest placé dans le dossier principal, mais n'est pas appelé directement. Au lieu de cela, il est lancé via un .batfichier qui vérifie si Windows est en 32 ou 64 bits et démarre .exedans 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 .batfichier 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é.

harrymc
la source
Qu'entendez-vous par les mots "pour démarrer le fichier .exe dans le contexte d'un sous-dossier"?
Ilya
Je veux dire conceptuellement faire cd Win32DLLou cd Win64DLLavant d'exécuter ..\prog.exe. Les chemins doivent être écrits plus explicitement que cette version courte.
harrymc
0

L'utilisation du KnownDLLmé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.

MSalters
la source
Pourriez-vous s'il vous plaît élaborer un peu? googler par "knowndll" n'aide pas beaucoup, hélas.
ilya
@ilya: En bref, "KnownDLL" est une liste de noms de DLL mis en cache par Windows. Il n'est donc pas nécessaire de les localiser sur le disque lorsque vous les chargez. Le nom vient de la clé de registre où ils sont listés. Voir stackoverflow.com/questions/3555749/microsoft-known-dll pour plus de détails. En ajoutant opengl32.dllà cette liste, vous pouvez indiquer à Windows où trouver opengl32.dllsur le disque.
MSalters