2024-03-23 18:44:27 -04:00
using Serilog ;
using SPTInstaller.Models ;
using System.Diagnostics ;
using System.Text.RegularExpressions ;
using System.Threading.Tasks ;
using SPTInstaller.Helpers ;
namespace SPTInstaller.Installer_Tasks.PreChecks ;
2024-04-23 10:17:54 -04:00
[Obsolete("No longer needed, but keeping around for now just in case. Can be removed from code after 7/1/2024 if no issues are found")]
2024-03-23 18:44:27 -04:00
public class NetCore6PreCheck : PreCheckBase
{
public NetCore6PreCheck ( ) : base ( ".Net Core 6 Desktop Runtime" , true )
{
}
public override async Task < PreCheckResult > CheckOperation ( )
{
var minRequiredVersion = new Version ( "6.0.0" ) ;
string [ ] output ;
var failedButtonText = "Download .Net Core 6 Desktop Runtime" ;
var failedButtonAction = ( ) = >
{
Process . Start ( new ProcessStartInfo
{
FileName = "cmd.exe" ,
UseShellExecute = true ,
WindowStyle = ProcessWindowStyle . Hidden ,
ArgumentList = { "/C" , "start" , "https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-desktop-6.0.4-windows-x64-installer" }
} ) ;
} ;
try
{
2024-04-04 19:45:53 -07:00
var programFiles = Environment . ExpandEnvironmentVariables ( "%ProgramW6432%" ) ;
var result = ProcessHelper . RunAndReadProcessOutputs ( $@"{programFiles}\dotnet\dotnet.exe" , "--list-runtimes" ) ;
2024-03-23 18:44:27 -04:00
if ( ! result . Succeeded )
{
return PreCheckResult . FromError ( result . Message + "\n\nYou most likely don't have .net 6 installed" , failedButtonText , failedButtonAction ) ;
}
output = result . StdOut . Split ( "\r\n" ) ;
}
catch ( Exception ex )
{
Log . Error ( ex , $"PreCheck::{Name}::Exception" ) ;
return PreCheckResult . FromException ( ex ) ;
}
var highestFoundVersion = new Version ( "0.0.0" ) ;
foreach ( var lineVersion in output )
{
var regex = Regex . Match ( lineVersion , @"Microsoft.WindowsDesktop.App (\d\.\d\.\d)" ) ;
if ( ! regex . Success | | regex . Groups . Count < 1 )
continue ;
var stringVersion = regex . Groups [ 1 ] . Value ;
var foundVersion = new Version ( stringVersion ) ;
if ( foundVersion > = minRequiredVersion )
{
return PreCheckResult . FromSuccess ( $".Net Core {minRequiredVersion} Desktop Runtime or higher is installed.\n\nInstalled Version: {foundVersion}" ) ;
}
highestFoundVersion = foundVersion > highestFoundVersion ? foundVersion : highestFoundVersion ;
}
return PreCheckResult . FromError ( $".Net Core Desktop Runtime version {minRequiredVersion} or higher is required.\n\nHighest Version Found: {(highestFoundVersion > new Version(" 0.0 . 0 ") ? highestFoundVersion : " Not Found ")}\n\nThis is required to play SPT, but you can install it later if and shouldn't affect the SPT install process." , failedButtonText , failedButtonAction ) ;
}
}