diff --git a/Source/build.cpp b/Source/build.cpp index 2d10c54c..99898be1 100644 --- a/Source/build.cpp +++ b/Source/build.cpp @@ -2237,7 +2237,22 @@ int CEXEBuild::SetManifest() res_editor->UpdateResourceA(MAKEINTRESOURCE(24), MAKEINTRESOURCE(1), NSIS_DEFAULT_LANG, (LPBYTE) manifest.c_str(), manifest.length()); } catch (exception& err) { - ERROR_MSG("Error while setting manifest: %s\n", err.what()); + ERROR_MSG("Error setting manifest: %s\n", err.what()); + return PS_ERROR; + } + + return PS_OK; +} + +int CEXEBuild::UpdatePEHeader() +{ + try { + PIMAGE_NT_HEADERS headers = CResourceEditor::GetNTHeaders(m_exehead); + // workaround for bug #2697027 + headers->OptionalHeader.MajorImageVersion = 6; + headers->OptionalHeader.MinorImageVersion = 0; + } catch (std::runtime_error& err) { + ERROR_MSG("Error updating PE headers: %s\n", err.what()); return PS_ERROR; } @@ -2436,6 +2451,9 @@ int CEXEBuild::write_output(void) return PS_ERROR; } + // Final PE touch-ups + RET_UNLESS_OK( UpdatePEHeader() ); + RET_UNLESS_OK( pack_exe_header() ); diff --git a/Source/build.h b/Source/build.h index a5f5dcf3..3983edab 100644 --- a/Source/build.h +++ b/Source/build.h @@ -247,6 +247,7 @@ class CEXEBuild { void PrepareHeaders(IGrowBuf *hdrbuf); int SetVarsSection(); int SetManifest(); + int UpdatePEHeader(); int resolve_jump_int(const char *fn, int *a, int offs, int start, int end); int resolve_call_int(const char *fn, const char *str, int fptr, int *ofs);