Fix GetGamePath (#130)

Previously, the registry was used to get the local appdata folder for
the user folder. I've switched this over to a windows api function which
fixes some cases where the launcher wouldn't be able to find the appdata
folder in the registry.
This commit is contained in:
Lion 2024-10-04 23:12:56 +02:00 committed by GitHub
commit b8fdbc4ed9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -8,6 +8,7 @@
#if defined(_WIN32) #if defined(_WIN32)
#include <windows.h> #include <windows.h>
#include <shlobj.h>
#elif defined(__linux__) #elif defined(__linux__)
#include "vdf_parser.hpp" #include "vdf_parser.hpp"
#include <pwd.h> #include <pwd.h>
@ -40,17 +41,17 @@ std::string GetGamePath() {
Path = QueryKey(hKey, 4); Path = QueryKey(hKey, 4);
if (Path.empty()) { if (Path.empty()) {
sk = R"(SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders)"; Path = "";
openRes = RegOpenKeyEx(HKEY_CURRENT_USER, sk, 0, KEY_ALL_ACCESS, &hKey); char appDataPath[MAX_PATH];
if (openRes != ERROR_SUCCESS) { HRESULT result = SHGetFolderPathA(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, appDataPath);
sk = R"(SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders)"; if (SUCCEEDED(result)) {
openRes = RegOpenKeyEx(HKEY_CURRENT_USER, sk, 0, KEY_ALL_ACCESS, &hKey); Path = appDataPath;
} }
if (openRes != ERROR_SUCCESS) {
if (Path.empty()) {
fatal("Cannot get Local Appdata directory"); fatal("Cannot get Local Appdata directory");
} }
Path = QueryKey(hKey, 5);
Path += "\\BeamNG.drive\\"; Path += "\\BeamNG.drive\\";
} }