这是我原始答案的编辑版本。
bool GetProductAndVersion(CStringA & strProductName, CStringA & strProductVersion){ // get the filename of the executable containing the version resource TCHAR szFilename[MAX_PATH + 1] = {0}; if (GetModuleFileName(NULL, szFilename, MAX_PATH) == 0) { TRACE("GetModuleFileName failed with error %dn", GetLastError()); return false; } // allocate a block of memory for the version info DWORD dummy; DWORD dwSize = GetFileVersionInfoSize(szFilename, &dummy); if (dwSize == 0) { TRACE("GetFileVersionInfoSize failed with error %dn", GetLastError()); return false; } std::vector<BYTE> data(dwSize); // load the version info if (!GetFileVersionInfo(szFilename, NULL, dwSize, &data[0])) { TRACE("GetFileVersionInfo failed with error %dn", GetLastError()); return false; } // get the name and version strings LPVOID pvProductName = NULL; unsigned int iProductNameLen = 0; LPVOID pvProductVersion = NULL; unsigned int iProductVersionLen = 0; // replace "040904e4" with the language ID of your resources if (!VerQueryValue(&data[0], _T("\StringFileInfo\040904e4\ProductName"), &pvProductName, &iProductNameLen) || !VerQueryValue(&data[0], _T("\StringFileInfo\040904e4\ProductVersion"), &pvProductVersion, &iProductVersionLen)) { TRACE("Can't obtain ProductName and ProductVersion from resourcesn"); return false; } strProductName.SetString((LPCSTR)pvProductName, iProductNameLen); strProductVersion.SetString((LPCSTR)pvProductVersion, iProductVersionLen); return true;}


