PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
23 nov. 2005 à 22:53
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDerniè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]
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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]
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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]
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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)