From 89ddfbe50b4dd15600c2731f5f4aa3dfe4d87fc0 Mon Sep 17 00:00:00 2001 From: Calyx Hikari Date: Tue, 28 Oct 2025 23:46:38 +0800 Subject: [PATCH] Add DotNet35 install option --- index.html | 82 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 74 insertions(+), 8 deletions(-) diff --git a/index.html b/index.html index 6dcc760..ca132db 100644 --- a/index.html +++ b/index.html @@ -45,11 +45,10 @@ function Main { } } + $dxInstallOption = "Y" if ($isServer) { - Write-Warning "Windows Server detected, DirectX will not be installed. To install it anyway, execute following command:" - Write-Host "irm https://get.msvc.win/dx | iex" - Write-Host "This script will continue in 10 seconds..." - Start-Sleep -Seconds 10 + Write-Host "Windows Server detected. Would you like to install DirectX Runtime?" + $dxInstallOption = Get-UserConfirmation -Message "" -TimeoutSeconds 10 -Default "N" } # --- Elevated section --- @@ -75,6 +74,21 @@ function Main { Write-Host "Detected system proxy: $proxyAddress" } + # --- Check .NET Framework 3.5 --- + $net35Key = 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5' + $isNet35Installed = $false + $installNet35 = $false + if (Test-Path $net35Key) { + $net35 = Get-ItemProperty -Path $net35Key + $isNet35Installed = $net35.Install -eq 1 + } + + if (-not $isNet35Installed) { + Write-Host ".NET Framework 3.5 is not installed. Would you like to download and install it (Y/N)?" + $dotNetInstallOption = Get-UserConfirmation -Message "" -TimeoutSeconds 10 + $installNet35 = $dotNetInstallOption -eq "Y" + } + # --- Ensure aria2c is available --- if (-not (Test-Path $aria2Exe)) { Write-Host "Downloading aria2c..." @@ -117,7 +131,7 @@ function Main { @{ Name = "vcredist_2015-2022_x64.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x64.exe"; Year = "2012-2022" } ) - if (-not $isServer) { + if ($dxInstallOption -eq "Y") { $downloads += @{ Name = "directx_redist.exe"; Url = "https://download.microsoft.com/download/8/4/a/84a35bf1-dafe-4ae8-82af-ad2ae20b6b14/directx_jun2010_redist.exe" } } @@ -125,6 +139,15 @@ function Main { $downloads += @{ Name = "vcredist_2015-2022_arm64.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.arm64.exe"; Year = "2012-2022" } } + if ($installNet35) { + if ($buildVersion -ge 27965) { + $downloads += @{ Name = "dotnet35setup.exe"; Url = "https://download.microsoft.com/download/3d2c2884-8241-44c2-ad5e-39c8a3fecf15/DotNet35Setup.exe"; Year = "dotnet35_vnext" } + } + else { + $downloads += @{ Name = "dotnet35setup.exe"; Url = "https://download.visualstudio.microsoft.com/download/pr/b635098a-2d1d-4142-bef6-d237545123cb/2651b87007440a15209cac29634a4e45/dotnetfx35.exe"; Year = "dotnet35_legacy" } + } + } + $ariaListPath = Join-Path $tempDir "fileList.txt" # --- Download everything up front --- @@ -196,7 +219,7 @@ function Main { } # --- Install DirectX --- - if (-not $isServer) { + if ($dxInstallOption -eq "Y") { Write-Host "Installing DirectX..." Start-Process -FilePath "$tempDir\directx_redist.exe" -ArgumentList "/Q /T:`"$tempDir`"" -Wait Start-Process -FilePath "$tempDir\DXSETUP.exe" -ArgumentList "/silent" -Wait @@ -215,6 +238,15 @@ function Main { Write-Host "Installing $($item.Name)..." Start-Process -FilePath $exePath -ArgumentList $arguments -Wait } + + # --- Install .NET Framework 3.5 --- + if ($installNet35) { + foreach ($item in $downloads | Where-Object { $_.Name -like "dotnet*" }) { + $arguments = if ($item.Year -in @("dotnet35_legacy")) { "/q /norestart" } else { "/quiet /norestart" } + Write-Host "Installing $($item.Name)..." + Start-Process -FilePath $exePath -ArgumentList $arguments -Wait + } + } # --- Install Visual Studio 2010 Tools for Office Runtime --- Write-Host "Installing Visual Studio 2010 Tools for Office Runtime ..." @@ -227,12 +259,46 @@ function Main { Remove-Item -Path $flagPath -Force -ErrorAction SilentlyContinue # --- Show DirectX installation info for Server --- - if ($isServer) { - Write-Warning "DirectX wasn't installed. To install it, execute following command:" + if ($dxInstallOption -ne "Y") { + Write-Warning "DirectX wasn't installed. To install it later, execute following command:" Write-Host "irm https://get.msvc.win/dx | iex" } } +function Get-UserConfirmation { + param ( + [string]$Message = "Do you want to proceed? (Y/N)", + [int]$TimeoutSeconds = 10, + [string]$Default = "Y" + ) + + Write-Host "$Message (Option '$Default' will be selected automatically in $TimeoutSeconds seconds)" + + $stopwatch = [System.Diagnostics.Stopwatch]::StartNew() + $inputChar = $null + + while ($stopwatch.Elapsed.TotalSeconds -lt $TimeoutSeconds) { + if ([Console]::KeyAvailable) { + $key = [Console]::ReadKey($true) + $char = $key.KeyChar.ToString().ToUpper() + + if ($char -eq 'Y' -or $char -eq 'N') { + $inputChar = $char + break + } else { + Write-Host "Invalid input: '$char'. Please press Y or N." + } + } + Start-Sleep -Milliseconds 200 + } + + if (-not $inputChar) { + return $Default + } else { + return $inputChar + } +} + Main Write-Host "Press any key to exit." $null = [System.Console]::ReadKey($true) \ No newline at end of file