| 153 | } |
| 154 | |
| 155 | VS_FIXEDFILEINFO GetFileVersion(const std::wstring& fileName) |
| 156 | { |
| 157 | DWORD handle = 0UL; |
| 158 | DWORD size = ::GetFileVersionInfoSizeW(fileName.c_str(), &handle); |
| 159 | if (size == 0) { |
| 160 | throw windows_error("failed to determine file version info size"); |
| 161 | } |
| 162 | |
| 163 | boost::scoped_array<char> buffer(new char[size]); |
| 164 | try { |
| 165 | handle = 0UL; |
| 166 | if (!::GetFileVersionInfoW(fileName.c_str(), handle, size, buffer.get())) { |
| 167 | throw windows_error("failed to determine file version info"); |
| 168 | } |
| 169 | |
| 170 | void* versionInfoPtr = nullptr; |
| 171 | UINT versionInfoLength = 0; |
| 172 | if (!::VerQueryValue(buffer.get(), L"\\", &versionInfoPtr, &versionInfoLength)) { |
| 173 | throw windows_error("failed to determine file version"); |
| 174 | } |
| 175 | |
| 176 | VS_FIXEDFILEINFO result = *(VS_FIXEDFILEINFO*)versionInfoPtr; |
| 177 | return result; |
| 178 | } catch (...) { |
| 179 | throw; |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | std::wstring GetFileVersionString(const std::wstring& fileName) |
| 184 | { |
no test coverage detected