Added GetDllVersion /ProductVersion switch
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7310 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
52d6782447
commit
3a3d2202a7
10 changed files with 36 additions and 30 deletions
|
@ -334,7 +334,7 @@ static bool GetTLBVersionUsingAPI(const TCHAR *filepath, DWORD &high, DWORD &low
|
|||
}
|
||||
#endif //~ !_WIN32
|
||||
|
||||
bool GetTLBVersion(const TCHAR *filepath, DWORD &high, DWORD &low)
|
||||
bool GetTLBVersion(const TCHAR *filepath, DWORD &high, DWORD &low, bool NotUsed)
|
||||
{
|
||||
bool found = false;
|
||||
#if defined(_WIN32) && !defined(NSIS_GETTLBVERSION_FORCEINTERNAL)
|
||||
|
@ -345,11 +345,11 @@ bool GetTLBVersion(const TCHAR *filepath, DWORD &high, DWORD &low)
|
|||
return found;
|
||||
}
|
||||
|
||||
static bool GetDLLVersionUsingRE(const TCHAR *filepath, DWORD &high, DWORD &low)
|
||||
static bool GetDLLVersionUsingRE(const TCHAR *filepath, DWORD &high, DWORD &low, bool Product)
|
||||
{
|
||||
bool found = false;
|
||||
LANGID anylangid = CResourceEditor::ANYLANGID;
|
||||
unsigned long fileSize;
|
||||
unsigned long fileSize, fieldofs = Product ? 2 : 0;
|
||||
void*pFileData = alloc_and_read_file(filepath, fileSize);
|
||||
if (!pFileData) return false;
|
||||
try
|
||||
|
@ -369,7 +369,7 @@ static bool GetDLLVersionUsingRE(const TCHAR *filepath, DWORD &high, DWORD &low)
|
|||
VS_FIXEDFILEINFO *verinfo = (VS_FIXEDFILEINFO*)(resdata + len);
|
||||
if (ressize >= len + sizeof(VS_FIXEDFILEINFO) && verinfo->dwSignature == FIX_ENDIAN_INT32(VS_FFI_SIGNATURE))
|
||||
{
|
||||
high = FIX_ENDIAN_INT32(verinfo->dwFileVersionMS), low = FIX_ENDIAN_INT32(verinfo->dwFileVersionLS);
|
||||
high = FIX_ENDIAN_INT32((&verinfo->dwFileVersionMS)[fieldofs]), low = FIX_ENDIAN_INT32((&verinfo->dwFileVersionLS)[fieldofs]);
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
@ -383,11 +383,11 @@ static bool GetDLLVersionUsingRE(const TCHAR *filepath, DWORD &high, DWORD &low)
|
|||
return found;
|
||||
}
|
||||
|
||||
static bool GetDLLVersionUsingAPI(const TCHAR *filepath, DWORD &high, DWORD &low)
|
||||
static bool GetDLLVersionUsingAPI(const TCHAR *filepath, DWORD &high, DWORD &low, bool Product)
|
||||
{
|
||||
bool found = false;
|
||||
#ifdef _WIN32
|
||||
TCHAR path[1024], *name;
|
||||
TCHAR path[1024], *name, fieldofs = Product ? 2 : 0;
|
||||
path[0] = 0;
|
||||
GetFullPathName(filepath, 1024, path, &name);
|
||||
|
||||
|
@ -401,7 +401,7 @@ static bool GetDLLVersionUsingAPI(const TCHAR *filepath, DWORD &high, DWORD &low
|
|||
VS_FIXEDFILEINFO *pvsf;
|
||||
if (GetFileVersionInfo(path, 0, verSize, buf) && VerQueryValue(buf, _T("\\"), (void**) &pvsf, &valSize))
|
||||
{
|
||||
high = pvsf->dwFileVersionMS, low = pvsf->dwFileVersionLS;
|
||||
high = (&pvsf->dwFileVersionMS)[fieldofs], low = (&pvsf->dwFileVersionLS)[fieldofs];
|
||||
found = true;
|
||||
}
|
||||
free(buf);
|
||||
|
@ -420,11 +420,11 @@ typedef struct tagMINI_IMAGE_VXD_HEADER {
|
|||
} MINI_IMAGE_VXD_HEADER, *PMINI_IMAGE_VXD_HEADER;
|
||||
#pragma pack(pop)
|
||||
|
||||
static bool GetDLLVersionFromVXD(const TCHAR *filepath, DWORD &high, DWORD &low)
|
||||
static bool GetDLLVersionFromVXD(const TCHAR *filepath, DWORD &high, DWORD &low, bool Product)
|
||||
{
|
||||
bool found = false;
|
||||
FILEVIEW map;
|
||||
char *filedata = create_file_view_readonly(filepath, map);
|
||||
char *filedata = create_file_view_readonly(filepath, map), fieldofs = Product ? 2 : 0;
|
||||
if (filedata)
|
||||
{
|
||||
PIMAGE_DOS_HEADER pDosHdr = (PIMAGE_DOS_HEADER) filedata;
|
||||
|
@ -452,7 +452,7 @@ static bool GetDLLVersionFromVXD(const TCHAR *filepath, DWORD &high, DWORD &low)
|
|||
VS_FIXEDFILEINFO *pFFI = MKPTR(VS_FIXEDFILEINFO*, pVSVI, 2 + 2 + 16);
|
||||
if (LE2HE32(pFFI->dwSignature) == 0xFEEF04BD)
|
||||
{
|
||||
high = LE2HE32(pFFI->dwFileVersionMS), low = LE2HE32(pFFI->dwFileVersionLS);
|
||||
high = LE2HE32((&pFFI->dwFileVersionMS)[fieldofs]), low = LE2HE32((&pFFI->dwFileVersionLS)[fieldofs]);
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
@ -465,11 +465,11 @@ static bool GetDLLVersionFromVXD(const TCHAR *filepath, DWORD &high, DWORD &low)
|
|||
return found;
|
||||
}
|
||||
|
||||
bool GetDLLVersion(const TCHAR *filepath, DWORD &high, DWORD &low)
|
||||
bool GetDLLVersion(const TCHAR *filepath, DWORD &high, DWORD &low, bool Product)
|
||||
{
|
||||
bool result = GetDLLVersionUsingAPI(filepath, high, low);
|
||||
if (!result) result = GetDLLVersionUsingRE(filepath, high, low);
|
||||
if (!result) result = GetDLLVersionFromVXD(filepath, high, low);
|
||||
bool result = GetDLLVersionUsingAPI(filepath, high, low, Product);
|
||||
if (!result) result = GetDLLVersionUsingRE(filepath, high, low, Product);
|
||||
if (!result) result = GetDLLVersionFromVXD(filepath, high, low, Product);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue