Page 1 sur 2
problem 32 bit sur 64 bit
Publié : ven. 03/févr./2017 8:56
par ChaudEf
bonjour
j'ecrit un petit programme, et je voudrais faire une seul version, 32 bit, et la distribuer aussi pour les 64 bit.
jusque la pas de probleme, mais quand j'essaye d'acceder au dossier system32, et je compile en 32 sur une machine (windows) 64, ca me redirige automatiquement au dossier sys64wow!!!
c'est un bug? il y a une solution pour arriver au dossier system32?
merci
Re: problem 32 bit sur 64 bit
Publié : ven. 03/févr./2017 12:25
par cage
Bonjour,
Sur une version 64-bit de Windows, les noms System32 et Sys64Wow sont trompeurs.
System32 contient les éléments 64bits et Sys64Wow contient les éléments 32bits
Par exemple les DLL 64 vont dans System32 alors que les DLL 32 vont dans Sys64Wow
Si une application 32 essaye de joindre System32 elle est redirigée vers Sys64Wow
Donc, le comportement que tu signale me parait tout a fait normal.
Re: problem 32 bit sur 64 bit
Publié : ven. 03/févr./2017 12:58
par ChaudEf
Ok, et si je veux tout de même accéder a system32, il n'y a pas moyen ?
Re: problem 32 bit sur 64 bit
Publié : ven. 03/févr./2017 13:29
par djes
cage a écrit :Bonjour,
Sur une version 64-bit de Windows, les noms System32 et Sys64Wow sont trompeurs.
System32 contient les éléments 64bits et Sys64Wow contient les éléments 32bits
Par exemple les DLL 64 vont dans System32 alors que les DLL 32 vont dans Sys64Wow
Si une application 32 essaye de joindre System32 elle est redirigée vers Sys64Wow
Donc, le comportement que tu signale me parait tout a fait normal.

Re: problem 32 bit sur 64 bit
Publié : ven. 03/févr./2017 13:39
par cage
Microsoft a introduit quelques limitations pour les applications 32 exécutées sur Win64
Par exemple, une application 32 ne peut exécuter telnet.exe et quelques autres exe
De même, une application 32 qui fait appel a une DLL la cherchera dans Sys64Wow
Mais une application 32 peut toujours accéder a System32 en dehors des contraintes imposées par Microsoft pour des applications 32 tournant sur un Win64
Ce n'est pas moi qui l'invente, et pour l'avoir expérimenté a mes dépends, je fourni toujours une version 32 et 64-bit des mes applications et j’empêche la version 32 d'être exécutée sur un Win64
Re: problem 32 bit sur 64 bit
Publié : ven. 03/févr./2017 14:15
par djes
Merci pour les infos, c'est le genre de détails qu'il vaut mieux connaître, et qu'on ne peut absolument pas deviner...
Re: problem 32 bit sur 64 bit
Publié : ven. 03/févr./2017 14:30
par ChaudEf
Merci beaucoup
Donc en fin de compte il y a moyen d'acceder ou pas?
Envoyé de mon iPhone en utilisant Tapatalk
Re: problem 32 bit sur 64 bit
Publié : ven. 03/févr./2017 14:54
par cage
Oui, bien sur.
Une Application 32 peut toujours accéder au répertoire System32 sous Win64
Lister le répertoire par exemple, rechercher les exe (sauf Telnet.exe, SnippingTool.exe, ...)
Ton application 32 ne pouvant voir les exe ci dessus, elle ne pourra les exécuter.
Re: problem 32 bit sur 64 bit
Publié : ven. 03/févr./2017 17:42
par Ar-S
La preuve par l'exemple :
Sous un Windows 64 bit
Code : Tout sélectionner
ExamineEnvironmentVariables()
prog$ = GetEnvironmentVariable("SystemRoot")+"\system32\SnippingTool.exe"
Debug RunProgram(prog$,"","")
ça te retournera
0 en compilant en pb x86 et ça te
retourne 1 (en laçant le programme) en compilant en x64
Re: problem 32 bit sur 64 bit
Publié : ven. 03/févr./2017 19:41
par GallyHC
Bonjour,
Merci pour ces précisions très pratique. Une question me taraude l'esprit dans la même logique, une application PB X64 peu utiliser a une Dll x32 ou pas (je demande pour un logiciel perso que je fait et pour le moment je n'arrive justement a rien)?
Cordialement,
GallyHC
Re: problem 32 bit sur 64 bit
Publié : ven. 03/févr./2017 21:14
par Ar-S
Dans l'absolu je dirai oui si tout est conforme dans le Dll (rien qu'à voir les .L au lieu des .i qui peuvent mettre la pagaille..)
Re: problem 32 bit sur 64 bit
Publié : sam. 04/févr./2017 0:59
par cage
Je n'utilise pas de DLL directement dans mes applications PB
mais hormis VB et peut-être d'autres logiciels qui nécessitent que les DLL soient dans le bon répertoire système et enregistrées, pas mal d'applications fonctionnent en copiant directement les DLL dans le même répertoire que les exe.
Par exemple, si on n'a pas les droits administrateur et qu'un logiciel nécessite un VCR (Visual C++ Redistribuable) particulier, il suffit d'extraire les DLL du VCR et de les copier dans le répertoire de l'exe.
Dans ton cas, essaye de copier la DLL dans System32, Sys64Wow et dans le répertoire de ton exe
Si cela fonctionne, essaye en enlevant une a une les DLL
Re: problem 32 bit sur 64 bit
Publié : sam. 04/févr./2017 10:05
par Zorro
@Cage : +1
voici comment windows fait pour recharcher les dll :
https://msdn.microsoft.com/fr-fr/library/7d83bc18.aspx
voici donc l'ordre de recherche de Windows pour les DLL
Avec une liaison à la fois implicite et explicite, Windows recherche d'abord les « DLL connues », telles que Kernel32.dll et User32.dll. Windows recherche ensuite les DLL dans les emplacements suivants selon l'ordre indiqué :
1- Le répertoire contenant le module exécutable du processus en cours.
2- Le répertoire actif.
3- Le répertoire System de Windows. La fonction GetSystemDirectory récupère le chemin de ce répertoire.
4- Le répertoire Windows. La fonction GetWindowsDirectory récupère le chemin de ce répertoire.
5- Les répertoires désignés dans la variable d'environnement PATH.
Re: problem 32 bit sur 64 bit
Publié : sam. 04/févr./2017 13:26
par poshu
Zorro a écrit :@Cage : +1
voici comment windows fait pour recharcher les dll :
https://msdn.microsoft.com/fr-fr/library/7d83bc18.aspx
voici donc l'ordre de recherche de Windows pour les DLL
Avec une liaison à la fois implicite et explicite, Windows recherche d'abord les « DLL connues », telles que Kernel32.dll et User32.dll. Windows recherche ensuite les DLL dans les emplacements suivants selon l'ordre indiqué :
1- Le répertoire contenant le module exécutable du processus en cours.
2- Le répertoire actif.
3- Le répertoire System de Windows. La fonction GetSystemDirectory récupère le chemin de ce répertoire.
4- Le répertoire Windows. La fonction GetWindowsDirectory récupère le chemin de ce répertoire.
5- Les répertoires désignés dans la variable d'environnement PATH.
Oh merde, comme quoi faut lire la doc, j'aurai parié sur un ordre fort différent °_°;
Re: problem 32 bit sur 64 bit
Publié : dim. 05/févr./2017 11:03
par ChaudEf
Merci beaucoup pour toutes les explications détaillées, mais je n'ai toujours pas résolu mon problème.
Je crée un fichier test.txt et je le colle dans le dossier system32.
En compilant sur une machine 64, en 32, ça retourne -1, et en 64 ca donne la taille du fichier !
C'est pas un bug ça ?
Et si non, il y a moyen d'accéder a ce fichier en compilant en 32?