Mode de compatibilité de l'EXE [Résolu]

PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 23 nov. 2005 à 22:53 - Dernière réponse : PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention
- 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]
Afficher la suite 

15 réponses

Meilleure réponse
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 24 nov. 2005 à 12:24
3
Merci
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

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Meilleure réponse
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 24 nov. 2005 à 22:52
3
Merci
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

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 23 nov. 2005 à 23:50
0
Merci
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)
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 23 nov. 2005 à 23:57
0
Merci
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]
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 24 nov. 2005 à 07:28
0
Merci
tu pourrais déjà conditionner l'appel à InitCommonControls(Ex)...

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 24 nov. 2005 à 11:56
0
Merci
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...
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 24 nov. 2005 à 12:24
0
Merci
(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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 24 nov. 2005 à 12:28
0
Merci
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]
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 24 nov. 2005 à 12:56
0
Merci
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...
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 24 nov. 2005 à 18:30
0
Merci
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]
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 24 nov. 2005 à 19:13
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 24 nov. 2005 à 20:02
0
Merci
Rey ou Jack, à tout hasard... est-ce que SetLayeredWindowAttributes fonctionne sous NT?
merci ;)
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 24 nov. 2005 à 20:48
0
Merci
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 24 nov. 2005 à 21:11
0
Merci
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)
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 24 nov. 2005 à 22:56
0
Merci
ok. c'est bien ce que je supposais.
merci @+
PCPT [AFCK]

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.