#include #include #include #include #include #include #include "wmdm_ver.h" #include BOOL FileExists(LPCSTR pszFile) { return (GetFileAttributesA(pszFile) != 0xFFFFFFFF); } //////////////////////////////////////////////////////////////////////// void SeparateName( const TCHAR *pszFullPath, TCHAR *pszFileName) //////////////////////////////////////////////////////////////////////// { if( ( NULL == pszFullPath ) || ( NULL == pszFileName ) ) { return; } TCHAR *pIndex = _tcsrchr( pszFullPath, _T( '\\' ) ); if( pIndex ) { _tcscpy( pszFileName, pIndex + 1); } else { _tcscpy( pszFileName, pszFullPath); } } ////////////////////////////////////////////////////////////////////////////// HRESULT GetFileVersion( LPCSTR pszFileName, LPSTR pszVersionStr ) ////////////////////////////////////////////////////////////////////////////// { if( ( NULL == pszFileName ) || ( !FileExists( pszFileName ) ) ) { return( E_FAIL ); } // // Figure out size of version information // DWORD dwHandle; DWORD versionInfoSize = GetFileVersionInfoSize( (LPSTR)pszFileName, &dwHandle ); if( 0 == versionInfoSize ) { DWORD dwError = GetLastError(); return( E_FAIL ); } // // Allocate a buffer to hold the version information // BYTE *pVersionInfo = new BYTE[versionInfoSize]; if( NULL == pVersionInfo ) { return( E_OUTOFMEMORY ); } // // Load the version information // HRESULT hr = E_FAIL; if( GetFileVersionInfo( (LPSTR)pszFileName, 0, versionInfoSize, pVersionInfo ) ) { VS_FIXEDFILEINFO *pFileInfo; UINT fileInfoLen; if( VerQueryValue( pVersionInfo, "\\", (void**)&pFileInfo, &fileInfoLen ) ) { sprintf( pszVersionStr, "%lu,%lu,%lu,%lu", HIWORD( pFileInfo->dwFileVersionMS ), LOWORD( pFileInfo->dwFileVersionMS ), HIWORD( pFileInfo->dwFileVersionLS ), LOWORD( pFileInfo->dwFileVersionLS ) ); hr = S_OK; } else { DWORD dwError = GetLastError(); } } else { DWORD dwError = GetLastError(); } delete [] pVersionInfo; return( hr ); } //***************************************************************************** void __cdecl main ( int argc, char **argv ) // See Usage for exact details //***************************************************************************** { BOOL fSent = FALSE; if( argc > 1 ) { char szVersion[100]; if( ( strstr( argv[1], "inf" ) ) || ( strstr( argv[1], "INF" ) ) ) { char *pComma; strcpy( szVersion, VER_WMDM_PRODUCTVERSION_STR ); pComma = strstr( szVersion, "." ); while( NULL != pComma ) { pComma[0] = ','; pComma = strstr( szVersion, "." ); } fSent = TRUE; } else if( ( strstr( argv[1], "purge" ) ) || ( strstr( argv[1], "PURGE" ) ) ) { char szData[50]; char szCurrentIni[MAX_PATH]; GetTempPath( sizeof( szCurrentIni ), szCurrentIni ); strcat( szCurrentIni, "\\mp2size.ini" ); if( GetPrivateProfileString( "Size", "Total", "Leprechauns", szData, sizeof( szData ), szCurrentIni ) && ( 0 != _stricmp( "Leprechauns", szData ) ) ) { printf( "TotalSize=%s\n", szData ); } DeleteFile( szCurrentIni ); exit( 0 ); } else if( argc > 2 ) { if( ( strstr( argv[1], "client" ) ) || ( strstr( argv[1], "CLIENT" ) ) ) { if( S_OK == GetFileVersion( argv[2], szVersion ) ) { fSent = TRUE; } } else if( ( strstr( argv[1], "addsize" ) ) || ( strstr( argv[1], "ADDSIZE" ) ) ) { if( FileExists( argv[2] ) ) { char szData[50]; char szCurrentIni[MAX_PATH]; struct _stat ss; DWORD dwSize = 0; GetTempPath( sizeof( szCurrentIni ), szCurrentIni ); strcat( szCurrentIni, "\\mp2size.ini" ); if( GetPrivateProfileString( "Size", "Total", "Leprechauns", szData, sizeof( szData ), szCurrentIni ) && ( 0 != _stricmp( "Leprechauns", szData ) ) ) { dwSize = atol( szData ); } else { dwSize = 0; } if( _stat( argv[2], &ss ) == 0) { dwSize += ss.st_size; } sprintf( szData, "%lu", dwSize ); WritePrivateProfileString( "Size", "Total", szData, szCurrentIni ); printf( "%lu", dwSize ); } else { printf( "File %s not found!\n", argv[2] ); } exit( 0 ); } else if( ( strstr( argv[1], "sizeit" ) ) || ( strstr( argv[1], "SIZEIT" ) ) ) { if( FileExists( argv[2] ) ) { TCHAR szFileName[100]; struct _stat ss; DWORD dwSize = 0; if( _stat( argv[2], &ss ) == 0) { dwSize += ss.st_size; } SeparateName( argv[2], szFileName ); printf( "%s=0,,%lu\n", szFileName, dwSize ); } exit( 0 ); } } if( fSent ) { printf( "\nVERSION=\"%s\"\n", szVersion ); } } if( !fSent ) { printf( "\n[VersionSection]\n" ); printf( "FileVersion=\"%s\"\n", VER_WMDM_PRODUCTVERSION_STR ); printf( "ProductVersion=\"%s\"\n", VER_WMDM_PRODUCTVERSION_STR ); printf( "FileDescription=\"Windows Media Component Setup Application\"\n" ); printf( "ProductName=\"Windows Media Component Setup Application\"\n" ); printf( "LegalCopyright=\"Copyright (C) %s %s\"\n", VER_WMDM_COMPANYNAME_STR, VER_WMDM_LEGALCOPYRIGHT_YEARS ); } exit( 0 ); }