gpt4 book ai didi

c++ - 如何检索 Windows EXE 或 DLL 的版本号?

转载 作者:可可西里 更新时间:2023-11-01 13:28:42 27 4
gpt4 key购买 nike

如何在运行时检索存储在 Windows exe/dll 中的版本信息?此信息是使用资源文件手动设置的。

最佳答案

这是使用标准 Windows API 函数的 C++ 方法:

try
{
TCHAR szFileName[ MAX_PATH ];
if( !::GetModuleFileName( 0, szFileName, MAX_PATH ) )
throw __LINE__;

DWORD nParam;
DWORD nVersionSize = ::GetFileVersionInfoSize( szFileName, &nParam );
if( !nVersionSize )
throw __LINE__;

HANDLE hMem = ::GetProcessHeap();
if( !hMem )
throw __LINE__;

LPVOID lpVersionData = ::HeapAlloc( hMem, 0, nVersionSize );
if( !lpVersionData )
throw __LINE__;

if( !::GetFileVersionInfo( szFileName, 0, nVersionSize, lpVersionData ) )
throw __LINE__;

LPVOID pVersionInfo;
UINT nSize;
if( !::VerQueryValue( lpVersionData, _T("\\"), &pVersionInfo, &nSize ) )
throw __LINE__;

VS_FIXEDFILEINFO *pVSInfo = (VS_FIXEDFILEINFO *)pVersionInfo;
CString strVersion;
strVersion.Format( _T(" version %i.%i.%i.%i"),
pVSInfo->dwProductVersionMS >> 16,
pVSInfo->dwProductVersionMS & 0xFFFF,
pVSInfo->dwProductVersionLS >> 16,
pVSInfo->dwProductVersionLS & 0xFFFF
);
GetDlgItem( IDC_ABOUT_VERSION )->SetWindowText( strAppName + strVersion );

if( !HeapFree( hMem, 0, lpVersionData ) )
throw __LINE__;
}
catch( int err )
{
ASSERT( !err ); // always break on debug builds to inspect error codes and such

DWORD dwErr = ::GetLastError();

// handle memory cleanup...
}

请注意,catch 部分纯粹是教育性的 - 在实际情况下,您会在内存分配后正确清理并实际使用错误代码!

关于c++ - 如何检索 Windows EXE 或 DLL 的版本号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/606036/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com