From c75dac3e3217edf731b5a13deb7b3f6e85a933a0 Mon Sep 17 00:00:00 2001 From: kichik Date: Fri, 20 Mar 2009 12:23:58 +0000 Subject: [PATCH] fixed bug #2697027 - error from add/remove when uninstaller is canceled and uac is disabled git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@5953 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/build.cpp | 20 +++++++++++++++++++- Source/build.h | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) 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);