problem 32 bit sur 64 bit

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

problem 32 bit sur 64 bit

Message 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
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: problem 32 bit sur 64 bit

Message 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.
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: problem 32 bit sur 64 bit

Message par ChaudEf »

Ok, et si je veux tout de même accéder a system32, il n'y a pas moyen ?
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: problem 32 bit sur 64 bit

Message 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.
8O
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: problem 32 bit sur 64 bit

Message 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
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: problem 32 bit sur 64 bit

Message 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...
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: problem 32 bit sur 64 bit

Message par ChaudEf »

Merci beaucoup
Donc en fin de compte il y a moyen d'acceder ou pas?


Envoyé de mon iPhone en utilisant Tapatalk
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: problem 32 bit sur 64 bit

Message 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.
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: problem 32 bit sur 64 bit

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: problem 32 bit sur 64 bit

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: problem 32 bit sur 64 bit

Message 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..)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: problem 32 bit sur 64 bit

Message 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
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: problem 32 bit sur 64 bit

Message 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.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: problem 32 bit sur 64 bit

Message 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 °_°;
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: problem 32 bit sur 64 bit

Message 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.

Code : Tout sélectionner

debug filesize("c:\windows\system32\test.txt")
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?
Windows 10 x64 -- Purebasic 5.70 LTS x86
Répondre