updater: Update installed version in registry

This commit is contained in:
derrod
2023-07-22 16:33:19 -07:00
committed by Lain
parent d25a4ddae1
commit bdc2da6e48
+50 -3
View File
@@ -1382,6 +1382,45 @@ static bool UpdateVS2019Redists(const Json &root)
return success;
}
static void UpdateRegistryVersion(const Json &manifest)
{
const char *regKey =
R"(Software\Microsoft\Windows\CurrentVersion\Uninstall\OBS Studio)";
LSTATUS res;
HKEY key;
char version[32];
int formattedLen;
/* The manifest does not store a version string, so we gotta make one ourselves. */
int beta = manifest["beta"].int_value();
int rc = manifest["rc"].int_value();
int major = manifest["version_major"].int_value();
int minor = manifest["version_minor"].int_value();
int patch = manifest["version_patch"].int_value();
if (beta || rc) {
formattedLen = sprintf_s(version, sizeof(version),
"%d.%d.%d-%s%d", major, minor, patch,
beta ? "beta" : "rc",
beta ? beta : rc);
} else {
formattedLen = sprintf_s(version, sizeof(version), "%d.%d.%d",
major, minor, patch);
}
if (formattedLen <= 0)
return;
res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, regKey, 0,
KEY_WRITE | KEY_WOW64_32KEY, &key);
if (res != ERROR_SUCCESS)
return;
RegSetValueExA(key, "DisplayVersion", 0, REG_SZ, (const BYTE *)version,
formattedLen + 1);
RegCloseKey(key);
}
extern "C" void UpdateHookFiles(void);
static bool Update(wchar_t *cmdLine)
@@ -1683,20 +1722,20 @@ static bool Update(wchar_t *cmdLine)
* Parse new manifest */
string error;
root = Json::parse(newManifest, error);
Json patchRoot = Json::parse(newManifest, error);
if (!error.empty()) {
Status(L"Update failed: Couldn't parse patch manifest: %S",
error.c_str());
return false;
}
if (!root.is_array()) {
if (!patchRoot.is_array()) {
Status(L"Update failed: Invalid patch manifest");
return false;
}
/* Update updates with patch information. */
for (const Json &patch : root.array_items()) {
for (const Json &patch : patchRoot.array_items()) {
if (!patch.is_object()) {
Status(L"Update failed: Invalid patch manifest");
return false;
@@ -1805,6 +1844,14 @@ static bool Update(wchar_t *cmdLine)
Status(L"Updating Game Capture hooks...");
UpdateHookFiles();
/* ------------------------------------- *
* Update installed version in registry */
if (!bIsPortable) {
Status(L"Updating version information...");
UpdateRegistryVersion(root);
}
/* ------------------------------------- *
* Finish */