63 lines
2.4 KiB
C#

using Microsoft.Win32;
using Serilog;
using SPTInstaller.Models;
using System.Diagnostics;
using System.Threading.Tasks;
namespace SPTInstaller.Installer_Tasks.PreChecks;
public class NetFramework472PreCheck : PreCheckBase
{
public NetFramework472PreCheck() : base(".Net Framework 4.7.2", false)
{
}
public override async Task<PreCheckResult> CheckOperation()
{
try
{
var minRequiredVersion = new Version("4.7.2");
var key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full");
var failedButtonText = "Download .Net Framework 4.7.2";
var failedButtonAction = () =>
{
Process.Start(new ProcessStartInfo
{
FileName = "cmd.exe",
UseShellExecute = true,
WindowStyle = ProcessWindowStyle.Hidden,
ArgumentList = { "/C", "start", "https://dotnet.microsoft.com/download/dotnet-framework/thank-you/net472-developer-pack-offline-installer" }
});
};
if (key == null)
{
return PreCheckResult.FromError("Could not find .Net Framework on system.\n\nThis is required to play SPT, but you can install it later and shouldn't affect the SPT install process.", failedButtonText, failedButtonAction);
}
var value = key.GetValue("Version");
if (value == null || value is not string versionString)
{
return PreCheckResult.FromError("Something went wrong. This precheck failed for an unknown reason. :(");
}
var installedVersion = new Version(versionString);
if (installedVersion < minRequiredVersion)
{
return PreCheckResult.FromError($".Net Framework {versionString} is installed, but {minRequiredVersion} or higher is required.\n\nYou can install it later and shouldn't affect the SPT install process.", failedButtonText, failedButtonAction);
}
return PreCheckResult.FromSuccess($".Net Framework {minRequiredVersion} or higher is installed.\n\nInstalled Version: {installedVersion}");
}
catch (Exception ex)
{
Log.Error(ex, $"PreCheck::{Name}::Exception");
return PreCheckResult.FromException(ex);
}
}
}