bpo-33125: Enables building traditional installer for Windows ARM64 (GH-30885)

Also makes a few general improvements to the build process and removes some dead code.
This commit is contained in:
Steve Dower 2022-01-28 16:48:06 +00:00 committed by GitHub
parent db77bcd609
commit 45faf151c6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 334 additions and 127 deletions

View file

@ -1501,6 +1501,9 @@ private:
hr = UpdateUIStrings(_command.action);
BalExitOnFailure(hr, "Failed to load UI strings.");
hr = FindProgramFilesArm();
BalExitOnFailure(hr, "Fatal error locating Program Files (Arm)");
GetBundleFileVersion();
// don't fail if we couldn't get the version info; best-effort only
LExit:
@ -2181,6 +2184,37 @@ private:
return hr;
}
HRESULT FindProgramFilesArm() {
wchar_t buffer[MAX_PATH + 1];
DWORD bufferLen = MAX_PATH;
LSTATUS res = RegGetValueW(
HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion",
L"ProgramFilesDir (Arm)",
RRF_RT_REG_SZ | RRF_RT_REG_EXPAND_SZ | RRF_SUBKEY_WOW6464KEY,
NULL,
buffer,
&bufferLen
);
if (res != ERROR_SUCCESS) {
// ProgramFilesArmFolder will default to ProgramFilesFolder. We only report
// an error if the value existed, as it will simply just be absent on non-ARM
// devices.
if (res != ERROR_FILE_NOT_FOUND) {
BalLog(BOOTSTRAPPER_LOG_LEVEL_ERROR, "Failed to query 'ProgramFilesDir (Arm)': error code %d", res);
}
return S_OK;
}
if (buffer[0]) {
wchar_t *p = &buffer[bufferLen / sizeof(wchar_t) - 1];
while (*p == L'\\' || *p == L'\0') { p -= 1; }
*++p = L'\\';
*++p = L'\0';
_engine->SetVariableString(L"ProgramFilesArmFolder", buffer);
}
return S_OK;
}
//
// OnPlan - plan the detected changes.
//