CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Funkcja odczytująca wersję programu

Funkcja odczytująca wersję programu

dział ogólny

Funkcja odczytująca wersję programu

Nowy postprzez Pitek » czwartek, 29 listopada 2012, 00:12

Witam, wiem ze ten temat był poruszany już nie raz ale może tym razem u da się go wyjaśnić do końca.
Mianowicie przy mapowaniu ustawionym na wchar_t i przy poniższym kodzie funkcji oraz jej wywołaniu (zapisane tak bo mieści się w MessageBox'ie).
Funkcja zwracam mi tylko wartość Major version a chciałbym otrzymać pełen obraz aż do Build.
Co robię źle lub co należy zmienić aby to uzyskać ?
KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------
String GetFileVersionInfo(wchar_t *ModulePath, String KeyName)
{
 LPVOID lpStr1 = NULL, lpStr2 = NULL;
 WORD* wTmp;
 DWORD dwHandlev = NULL;
 UINT dwLength;
 wchar_t sFileName[1024] = {0};
 wchar_t sTmp[1024] = {0};
 String sInfo;
 LPVOID* pVersionInfo;

 if(ModulePath == NULL) GetModuleFileName(NULL, sFileName, 1024);
 else wcscpy(sFileName, (LPTSTR)ModulePath);

 DWORD dwInfoSize = GetFileVersionInfoSize(sFileName, &dwHandlev);
 if(dwInfoSize)
 {
  pVersionInfo = new LPVOID[dwInfoSize];
  if(GetFileVersionInfo(sFileName, dwHandlev, dwInfoSize, pVersionInfo))
  {
   if(VerQueryValue(pVersionInfo, L"\\VarFileInfo\\Translation", &lpStr1, &dwLength))
   {
        wTmp = (WORD*)lpStr1;
        swprintf(sTmp, ("\\StringFileInfo\\%04x%04x\\" + KeyName).w_str(), *wTmp, *(wTmp + 1));
        if(VerQueryValue(pVersionInfo, sTmp, &lpStr2, &dwLength)) sInfo = (LPSTR)lpStr2;
   }
  }
  delete[] pVersionInfo;
 }
 return sInfo;
}
//--------------------------------
Wywołanie :
KOD cpp:     UKRYJ  
...GetFileVersionInfo(NULL, "FileVersion").w_str()...
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Windows 8 Pro 64bit / Ubuntu 14.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows 7Chrome

Re: Funkcja odczytująca wersję programu

Nowy postprzez Cyfrowy Baron » czwartek, 29 listopada 2012, 00:48

Ten kod u mnie działa prawidłowo i pobiera całą wersję pliku o ile plik całą wersję posiada:

Warunkiem prawidłowego działania kodu jest środowisko C++Builder 2010 w wersji co najmniej 14.0.3615.26342, czyli chyba z ostatnią poprawką bodajże Update 5. Bez poprawek środowisko zawiera wiele błędów, w tym błąd nie tyle z odczytywaniem wersji programu ile z jej nadawaniem programowi. Jeśli masz starszą wersję to nic na tym polu nie wskórasz, gdyż kompilator źle zapisuje wersję programu podczas kompilacji.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Pitek
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4730
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości

cron