Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.3.1 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Version de produit executable

Il y a quelques temps j'ai eu besoin de récupérer le numéro de version d'un exécutable Windows.
Ça à l'air bête, parce que sous Windows, un simple clic droit > propriété et hop c'est fait.
image

Sauf que niveau programmation, rien n'est prévu, ou presque.

J'ai passé des journées entières de recherche et croyez moi je n’exagère rien, je suis parti de zéro connaissance sur ce sujet et suis remonter de fil en anguille par des explications plus que vague et parfois par des trucs qui n'avaient rien à voir, j'ai beaucoup appris certes, mais j'ai aussi passé énormément de temps, et c'est ce temps que je voudrai faire économiser aux gens qui en ont besoin.

Au final le code semble bête, seulement il faut le trouver:

LPCTSTR LibName = (LPCTSTR)appPath.utf16();
WORD MajorVersion = 0;
WORD MinorVersion = 0;
WORD BuildNumber = 0;
WORD RevisionNumber = 0;
DWORD dwHandle, dwLen;
UINT BufLen;
LPTSTR lpData;
VS_FIXEDFILEINFO *pFileInfo;
dwLen = GetFileVersionInfoSize(LibName, &dwHandle);

if (!dwLen)
return "";

lpData = (LPTSTR) malloc (dwLen);
if (!lpData)
return "";

if( !GetFileVersionInfo(LibName, dwHandle, dwLen, lpData ) )
{
free (lpData);
return "";
}

if( VerQueryValue( lpData, (WCHAR*)L"\\", (LPVOID *) &pFileInfo, (PUINT)&BufLen ) )
{
// ici pFileInfo est une structure, changez dwProductVersionMS par une autre variable de cette structure pour obtenir des informations differentes
MajorVersion = HIWORD(pFileInfo->dwProductVersionMS);
MinorVersion = LOWORD(pFileInfo->dwProductVersionMS);
BuildNumber = HIWORD(pFileInfo->dwProductVersionLS);
RevisionNumber = LOWORD(pFileInfo->dwProductVersionLS);
free (lpData);

QString retour = "";
retour += QVariant(MajorVersion).toString() + ".";
retour += QVariant(MinorVersion).toString() + ".";
retour += QVariant(BuildNumber).toString() + ".";
retour += QVariant(RevisionNumber).toString();

return retour;
}
free (lpData);
return "";

Attention ça n'est compatible qu'avec windows !

Et il vous faudra ajouter cette ligne a votre .pro :

LIBS += -lversion
Connectez-vous ou Inscrivez-vous pour répondre.