0
0
mirror of https://github.com/sp-tarkov/launcher.git synced 2025-02-12 17:30:42 -05:00

Merge pull request 'Feature - Add file version comparison check for bepinex/plugins/spt-core.dll to ensure it matches same value as server on game start' (!55) from coreDLLVersionCheck into master

Reviewed-on: SPT/Launcher#55
This commit is contained in:
IsWaffle 2024-06-11 15:53:02 +00:00
commit 0b3b0fefe5
4 changed files with 67 additions and 3 deletions

View File

@ -20,6 +20,7 @@ using System.Threading.Tasks;
using SPT.Launcher.Controllers;
using SPT.Launcher.Interfaces;
using System.Runtime.InteropServices;
using SPT.Launcher.Models.SPT;
namespace SPT.Launcher
{
@ -65,6 +66,13 @@ namespace SPT.Launcher
LogManager.Instance.Error("[LaunchGame] Installed in Live :: YES");
return GameStarterResult.FromError(-1);
}
// Confirm core.dll version matches version server is running
if (IsCoreDllVersionMismatched(gamePath))
{
LogManager.Instance.Error("[LaunchGame] Core dll mismatch :: FAILED");
return GameStarterResult.FromError(-8);
}
LogManager.Instance.Info("[LaunchGame] Installed in Live :: NO");
@ -204,6 +212,39 @@ namespace SPT.Launcher
return isInstalledInLive;
}
static bool IsCoreDllVersionMismatched(string gamePath)
{
try
{
var serverVersion = new SPTVersion(ServerManager.GetVersion());
var coreDllVersionInfo = FileVersionInfo.GetVersionInfo(Path.Combine($"{gamePath}/BepinEx/plugins/spt", "spt-core.dll"));
var dllVersion = new SPTVersion(coreDllVersionInfo.FileVersion);
LogManager.Instance.Info($"[LaunchGame] spt-core.dll version: {dllVersion}");
// Edge case, running on locally built modules dlls, ignore check and return ok
if (dllVersion.Major == 0) return false;
// check 'X'.x.x
if (serverVersion.Major != dllVersion.Major) return true;
// check x.'X'.x
if (serverVersion.Minor != dllVersion.Minor) return true;
// check x.x.'X'
if (serverVersion.Tag != dllVersion.Tag) return true;
return false; // Versions match, hooray
}
catch (Exception ex)
{
LogManager.Instance.Exception(ex);
}
return true;
}
void SetupGameFiles(string gamePath)
{
var files = new []

View File

@ -1792,7 +1792,25 @@ namespace SPT.Launcher.Helpers
}
}
#endregion
#region core_dll_file_version_mismatch
private string _core_dll_file_version_mismatch;
public string core_dll_file_version_mismatch
{
get => _core_dll_file_version_mismatch;
set
{
if (_core_dll_file_version_mismatch != value)
{
_core_dll_file_version_mismatch = value;
RaisePropertyChanged(nameof(core_dll_file_version_mismatch));
}
}
}
#endregion
#endregion
public event PropertyChangedEventHandler PropertyChanged;

View File

@ -47,7 +47,11 @@ namespace SPT.Launcher.Models.Launcher
case -7:
Message = ":(";
break;
case -8:
Message = LocalizationProvider.Instance.core_dll_file_version_mismatch;
break;
default:
Message = LocalizationProvider.Instance.login_failed;
break;

View File

@ -95,5 +95,6 @@
"open_link_question_format_1": "Are you sure you want to open the following link: \n{0}",
"open_link": "Open Link",
"dev_mode": "Developer Mode",
"failed_to_save_settings": "Failed to save settings"
"failed_to_save_settings": "Failed to save settings",
"core_dll_file_version_mismatch": "Your BepinEx/plugins/spt/spt-core.dll file version doesn't match what was expected and is unable to start. Try reinstalling SPT"
}