Mode de compatibilité de l'EXE

Résolu
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 23 nov. 2005 à 22:53
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 24 nov. 2005 à 22:56
bonsoir,
à partir de VB6, sous XP, j'ai besoin de rendre compatible un exe vers Windows 2000.

j'arrive à récupérer la version du système et bien sûr le chemin et nom de l'exe, mais je ne trouve pas quelle API chercher...
S/G-FileAttributes n'a aucun rapport...
une idée? un piste? un produit fini?
merci^^
PCPT [AFCK]

15 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 nov. 2005 à 12:24
J'ai comparé deux Exe identiques, dont l'un etait en mode compatible, il sont identiques, cette info n'est pas stockée là...



mais dans Base de registres, effectivement :



HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 nov. 2005 à 22:52
elle plante tout autant....

la fonction n'etant pas trouvée dans la Dll qui l'exporte sous 2000 et +

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 nov. 2005 à 23:50
Salut
Bien confus tout ça ...
Explication de texte :

Avec VB6, tu as compilé un EXE sous XP.
Apparemment, il ne fonctionne aps sous W2k.
besoin de rendre compatible un exe : Pourquoi ? Quel problème/erreur as-tu ?
j'arrive à récupérer la version du système : La version de l'OS, tu veux dire, à savoir que tu es sous XP ou sous W2k. Bien, Ok.
et bien sûr le chemin et nom de l'exe : Bien sûr
mais je ne trouve pas quelle API chercher... : Pour trouver quoi ? Où est ta question ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 nov. 2005 à 23:57
merci de ton intérêt.
sûr ce PC (développement, WinXP), il est fréquent que je sois obligé de passer les exe en "compatible Windows2000" lorsqu'ils sont liés ont leur "moi.exe.manifest".

après recherches, il arrive parfois cet incident....
(donc de devoir passer manuellement cette compatibilité)
or je fais une classe pour créer et appliquer facilement un manifest.
je voudrais donc que ma classe modifie cette propriété sur l'exe (suite aux tests de système, création, etc...)

supposable par API.... (non? <- question = laquelle? comment?)
j'espère avoir été plus clair ;)
@ bientôt et merci
PCPT [AFCK]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 nov. 2005 à 07:28
tu pourrais déjà conditionner l'appel à InitCommonControls(Ex)...

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
24 nov. 2005 à 11:56
Salut pcpt

Sinon, pour modifier la compatibilité, si tu trouves pas d'API, y a forcément une clé dans la base de registre.

Il te faudrait un logiciel de comparaison du registre (Y en a au moins des shareware): tu sauvgarde, tu modifies les options de compatibilité, puis tu demandes les différences.

Le problème c'est qu'accèder directement à la base de registre est moins propre qu'avec l'API, et surtout que les données sont parfois plus ou moins cryptées...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 nov. 2005 à 12:24
(un simple recherche du nom du fichier dans la base de registre a suffit.... pas besoin d'un SnapShot ^^)

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 nov. 2005 à 12:28
merci à vous 2.
j'en étais arrivé aux mêmes conclusions sans la ligne du registre.
lorsque je compile mon projet, je passe manuellement en compatible 2000, je supprime l'exe, recompile, le nouvel exe est toujours en 2000.
c'était donc forcément le registre ;)

je regarde çà de plus près et vous tiens au courant.
++
PCPT [AFCK]
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
24 nov. 2005 à 12:56
Renfield m'a devancé !

Sinon, même conclusion que lui !

Une modification des données de la clé modifie instantanément les options de l'exe.

Par contre c'est dans HKCU...

Autrement dis, chaque utilisateur a ses propres options de compatibilité, ce qui ne vat pas te faciliter le boulot...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 nov. 2005 à 18:30
bon, bah çà a l'air fonctionnel

merci encore.

voici un bout de code qui peut être utile aux futurs éventuels lecteurs


Private Const cDestKey As String = "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
Private Const cDestValue As String = "WIN2000"

' on regarde si la clé existe
Dim lRet As Long, lKeyHandle As Long

lRet = RegOpenKeyEx(HKEY_CURRENT_USER, cDestKey, 0&, KEY_ALL_ACCESS, lKeyHandle)
If lRet = ERROR_SUCCESS Then
' elle existe, on ferme la lecture
Call RegCloseKey(lKeyHandle)
Else
' elle n'existe pas, on la créé
Call RegCreateKey(HKEY_CURRENT_USER, cDestKey, 0&)
End If

' on ré-ouvre la clé + vérif erreur registre (logiquement inutile.....)
lRet = RegOpenKeyEx(HKEY_CURRENT_USER, cDestKey, 0&, KEY_ALL_ACCESS, lKeyHandle)
If lRet <> ERROR_SUCCESS Then Exit Sub

' on récupère la valeur (peut ne pas exister)
Dim sBuffer As String, sValue As String
sBuffer = Space$(2048)
Call RegQueryValueEx(lKeyHandle, sPathFileExe, 0&, REG_SZ, sBuffer, Len (sBuffer))

sValue = LeftB$(sBuffer, 14)
sBuffer = Chr$(0)

' si la clé n'existe pas ou n'est pas bonne, on la créé
If sValue <> cDestValue Then
sValue = cDestValue & Chr$(0)
Call RegSetValueEx(lKeyHandle, sPathFileExe, 0&, REG_SZ, sValue, Len(sValue))
End If

' on ferme
Call RegCloseKey(lKeyHandle)


<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>


les API et constantes sont sur Guid-Api.
le reste est devinable...
plus de détails sur ma source Manifest que je posterai sous peu....

@+ et merci RenField
(et à toi aussi RT15 ^^)

PCPT [AFCK]
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 nov. 2005 à 19:13
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 nov. 2005 à 20:02
Rey ou Jack, à tout hasard... est-ce que SetLayeredWindowAttributes fonctionne sous NT?
merci ;)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 nov. 2005 à 20:48
Windows 2000 minimum

Google > SetLayeredWindowAttributes >"j'ai de la chance" >
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/setlayeredwindowattributes.asp

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 nov. 2005 à 21:11
ok, j'ai mal formulé. désolé :
si je fais un SetLayered... sous W98, l'appli plante. est-ce qu'elle plante également sous NT ou n'a juste aucun effet...
(je suppose que oui, mais c'est une certitude que j'ai besoin)
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 nov. 2005 à 22:56
ok. c'est bien ce que je supposais.
merci @+
PCPT [AFCK]
0
Rejoignez-nous