| 725 | } |
| 726 | |
| 727 | BOOL PluginList::setInstalledVersion(tstring pluginFilename, Plugin* plugin) |
| 728 | { |
| 729 | DWORD handle; |
| 730 | DWORD bufferSize = ::GetFileVersionInfoSize(pluginFilename.c_str(), &handle); |
| 731 | |
| 732 | if (bufferSize <= 0) |
| 733 | return FALSE; |
| 734 | |
| 735 | unsigned char* buffer = new unsigned char[bufferSize]; |
| 736 | ::GetFileVersionInfo(pluginFilename.c_str(), handle, bufferSize, buffer); |
| 737 | |
| 738 | /*struct LANGANDCODEPAGE { |
| 739 | WORD wLanguage; |
| 740 | WORD wCodePage; |
| 741 | } *lpTranslate;*/ |
| 742 | |
| 743 | VS_FIXEDFILEINFO* lpFileInfo; |
| 744 | |
| 745 | UINT cbFileInfo; |
| 746 | |
| 747 | VerQueryValue(buffer, |
| 748 | _T("\\"), |
| 749 | (LPVOID*)&lpFileInfo, |
| 750 | &cbFileInfo); |
| 751 | |
| 752 | if (cbFileInfo) |
| 753 | { |
| 754 | plugin->setInstalledVersion(PluginVersion((lpFileInfo->dwFileVersionMS & 0xFFFF0000) >> 16, |
| 755 | lpFileInfo->dwFileVersionMS & 0x0000FFFF, |
| 756 | (lpFileInfo->dwFileVersionLS & 0xFFFF0000) >> 16, |
| 757 | lpFileInfo->dwFileVersionLS & 0x0000FFFF)); |
| 758 | /* |
| 759 | HRESULT hr; |
| 760 | TCHAR subBlock[50]; |
| 761 | hr = StringCchPrintf(subBlock, 50, |
| 762 | _T("\\StringFileInfo\\%04x%04x\\FileVersion"), |
| 763 | lpTranslate[0].wLanguage, |
| 764 | lpTranslate[0].wCodePage); |
| 765 | |
| 766 | if (FAILED(hr)) |
| 767 | { |
| 768 | return FALSE; |
| 769 | } |
| 770 | else |
| 771 | { |
| 772 | TCHAR *fileVersion; |
| 773 | UINT fileVersionLength; |
| 774 | if(::VerQueryValue(buffer, subBlock, reinterpret_cast<LPVOID *>(&fileVersion), &fileVersionLength)) |
| 775 | { |
| 776 | if (fileVersion) |
| 777 | plugin->setInstalledVersion(PluginVersion(fileVersion)); |
| 778 | } |
| 779 | } |
| 780 | */ |
| 781 | |
| 782 | } |
| 783 | else |
| 784 | { |
no test coverage detected