From a238ee84d204fb93c37337a2099342354fed0596 Mon Sep 17 00:00:00 2001 From: Calyx Hikari Date: Sun, 29 Jun 2025 13:27:02 +0800 Subject: [PATCH] do not exit entire script --- 32 | 194 +++++++++++++++++++++++++------------------------ 64 | 194 +++++++++++++++++++++++++------------------------ dx | 166 +++++++++++++++++++++--------------------- index.html | 206 +++++++++++++++++++++++++++-------------------------- 4 files changed, 392 insertions(+), 368 deletions(-) diff --git a/32 b/32 index 3382fa2..f66587b 100644 --- a/32 +++ b/32 @@ -3,104 +3,110 @@ Add-Type -AssemblyName System.IO.Compression.FileSystem -if ($PSVersionTable.PSEdition -ne 'Desktop' -and $env:OS -ne 'Windows_NT') { - Write-Warning "Please run it on Windows. " - exit 1 -} - -$flagPath = "$env:TEMP\elevation_success.flag" -if (Test-Path $flagPath) { Remove-Item $flagPath -ErrorAction SilentlyContinue } - -# --- Elevation check --- -$IsAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole( - [Security.Principal.WindowsBuiltInRole]::Administrator) - -if (-not $IsAdmin) { - Write-Host "Elevation required. Relaunching..." - $tempScript = [IO.Path]::ChangeExtension([IO.Path]::GetTempFileName(), ".ps1") - Invoke-WebRequest -Uri "https://get.msvc.win/32" -OutFile $tempScript - Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$tempScript`"" - Start-Sleep -Seconds 10 - if (-Not (Test-Path $flagPath)) { - Write-Warning "User did not confirm UAC prompt or something went wrong." - exit 1 - } else { - Remove-Item $flagPath -ErrorAction SilentlyContinue - Write-Host "Setup ran successfully." - exit 0 +function Main { + if ($PSVersionTable.PSEdition -ne 'Desktop' -and $env:OS -ne 'Windows_NT') { + Write-Warning "Please run it on Windows. " + return 1 } -} -# --- Elevated section --- -New-Item -Path $flagPath -ItemType File -Force | Out-Null -Write-Host "Running with elevated privileges..." + $flagPath = "$env:TEMP\elevation_success.flag" + if (Test-Path $flagPath) { Remove-Item $flagPath -ErrorAction SilentlyContinue } -$tempDir = New-Item -ItemType Directory -Path ([IO.Path]::Combine($env:TEMP, [guid]::NewGuid().ToString())) -$aria2Dir = Join-Path $tempDir "aria2" -$aria2Exe = Join-Path $aria2Dir "aria2c.exe" + # --- Elevation check --- + $IsAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole( + [Security.Principal.WindowsBuiltInRole]::Administrator) -# --- Check User IP location--- - -$geoInfo = Invoke-RestMethod -Uri 'https://ipapi.co/json/' -$countryCode = $geoInfo.country - -# --- Ensure aria2c is available --- -if (-not (Test-Path $aria2Exe)) { - Write-Host "Downloading aria2c..." - $aria2Zip = Join-Path $tempDir "aria2.zip" - if ($countryCode -eq 'CN') { - $aria2Url = "https://gitee.com/HikariCalyx/OSTRemote/releases/download/v1.0/aria2-1.37.0-win-32bit-build1.zip" - } else { - $aria2Url = "https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-32bit-build1.zip" + if (-not $IsAdmin) { + Write-Host "Elevation required. Relaunching..." + $tempScript = [IO.Path]::ChangeExtension([IO.Path]::GetTempFileName(), ".ps1") + Invoke-WebRequest -Uri "https://get.msvc.win/32" -OutFile $tempScript + Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$tempScript`"" + Start-Sleep -Seconds 10 + if (-Not (Test-Path $flagPath)) { + Write-Warning "User did not confirm UAC prompt or something went wrong." + return 1 + } + else { + Remove-Item $flagPath -ErrorAction SilentlyContinue + Write-Host "Setup ran successfully." + return 0 + } } - Invoke-WebRequest -Uri $aria2Url -OutFile $aria2Zip - Expand-Archive -Path $aria2Zip -DestinationPath $aria2Dir -Force - $found = Get-ChildItem -Path $aria2Dir -Recurse -Filter "aria2c.exe" | Select-Object -First 1 - if ($found) { Copy-Item $found.FullName -Destination $aria2Exe -Force } + + # --- Elevated section --- + New-Item -Path $flagPath -ItemType File -Force | Out-Null + Write-Host "Running with elevated privileges..." + + $tempDir = New-Item -ItemType Directory -Path ([IO.Path]::Combine($env:TEMP, [guid]::NewGuid().ToString())) + $aria2Dir = Join-Path $tempDir "aria2" + $aria2Exe = Join-Path $aria2Dir "aria2c.exe" + + # --- Check User IP location--- + + $geoInfo = Invoke-RestMethod -Uri 'https://ipapi.co/json/' + $countryCode = $geoInfo.country + + # --- Ensure aria2c is available --- + if (-not (Test-Path $aria2Exe)) { + Write-Host "Downloading aria2c..." + $aria2Zip = Join-Path $tempDir "aria2.zip" + if ($countryCode -eq 'CN') { + $aria2Url = "https://gitee.com/HikariCalyx/OSTRemote/releases/download/v1.0/aria2-1.37.0-win-32bit-build1.zip" + } + else { + $aria2Url = "https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-32bit-build1.zip" + } + Invoke-WebRequest -Uri $aria2Url -OutFile $aria2Zip + Expand-Archive -Path $aria2Zip -DestinationPath $aria2Dir -Force + $found = Get-ChildItem -Path $aria2Dir -Recurse -Filter "aria2c.exe" | Select-Object -First 1 + if ($found) { Copy-Item $found.FullName -Destination $aria2Exe -Force } + } + + # --- Define all downloads --- + $downloads = @( + @{ Name = "directx_redist.exe"; Url = "https://download.microsoft.com/download/8/4/a/84a35bf1-dafe-4ae8-82af-ad2ae20b6b14/directx_jun2010_redist.exe" }, + @{ Name = "vcredist_2005_x86.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x86.exe"; Year = "2005" }, + @{ Name = "vcredist_2008_x86.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe"; Year = "2008" }, + @{ Name = "vcredist_2010_x86.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe"; Year = "2010" }, + @{ Name = "vcredist_2012_x86.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe"; Year = "2012" }, + @{ Name = "vcredist_2013_x86.exe"; Url = "https://aka.ms/highdpimfc2013x86enu"; Year = "2013" }, + @{ Name = "vcredist_2015-2022_x86.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x86.exe"; Year = "2015-2022" } + ) + + # --- Download everything up front --- + foreach ($item in $downloads) { + $outFile = Join-Path $tempDir $item.Name + Write-Host "Downloading $($item.Name)..." + Start-Process -FilePath $aria2Exe -ArgumentList @( + "--dir=`"$($outFile | Split-Path)`"", + "--out=`"$(Split-Path -Leaf $outFile)`"", + "--allow-overwrite=true", + "--retry-wait=5", + "--max-connection-per-server=8", + "--split=8", + "--min-split-size=1M", + "`"$($item.Url)`"" + ) -NoNewWindow -Wait + } + + # --- Install DirectX --- + 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 + + # --- Install VC++ Redistributables --- + foreach ($item in $downloads | Where-Object { $_.Name -like "vcredist*" }) { + $exePath = Join-Path $tempDir $item.Name + $args = if ($item.Year -in @("2005", "2008")) { "/q" } else { "/quiet /norestart" } + Write-Host "Installing $($item.Name)..." + Start-Process -FilePath $exePath -ArgumentList $args -Wait + } + + # --- Cleanup --- + Write-Host "Cleaning up temporary files..." + Start-Sleep -Seconds 2 + Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue + Remove-Item -Path $flagPath -Force -ErrorAction SilentlyContinue } -# --- Define all downloads --- -$downloads = @( - @{ Name = "directx_redist.exe"; Url = "https://download.microsoft.com/download/8/4/a/84a35bf1-dafe-4ae8-82af-ad2ae20b6b14/directx_jun2010_redist.exe" }, - @{ Name = "vcredist_2005_x86.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x86.exe"; Year = "2005" }, - @{ Name = "vcredist_2008_x86.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe"; Year = "2008" }, - @{ Name = "vcredist_2010_x86.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe"; Year = "2010" }, - @{ Name = "vcredist_2012_x86.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe"; Year = "2012" }, - @{ Name = "vcredist_2013_x86.exe"; Url = "https://aka.ms/highdpimfc2013x86enu"; Year = "2013" }, - @{ Name = "vcredist_2015-2022_x86.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x86.exe"; Year = "2015-2022" } -) - -# --- Download everything up front --- -foreach ($item in $downloads) { - $outFile = Join-Path $tempDir $item.Name - Write-Host "Downloading $($item.Name)..." - Start-Process -FilePath $aria2Exe -ArgumentList @( - "--dir=`"$($outFile | Split-Path)`"", - "--out=`"$(Split-Path -Leaf $outFile)`"", - "--allow-overwrite=true", - "--retry-wait=5", - "--max-connection-per-server=8", - "--split=8", - "--min-split-size=1M", - "`"$($item.Url)`"" - ) -NoNewWindow -Wait -} - -# --- Install DirectX --- -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 - -# --- Install VC++ Redistributables --- -foreach ($item in $downloads | Where-Object { $_.Name -like "vcredist*" }) { - $exePath = Join-Path $tempDir $item.Name - $args = if ($item.Year -in @("2005", "2008")) { "/q" } else { "/quiet /norestart" } - Write-Host "Installing $($item.Name)..." - Start-Process -FilePath $exePath -ArgumentList $args -Wait -} - -# --- Cleanup --- -Write-Host "Cleaning up temporary files..." -Start-Sleep -Seconds 2 -Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue -Remove-Item -Path $flagPath -Force -ErrorAction SilentlyContinue +Main \ No newline at end of file diff --git a/64 b/64 index 28d6eca..bffd65e 100644 --- a/64 +++ b/64 @@ -3,104 +3,110 @@ Add-Type -AssemblyName System.IO.Compression.FileSystem -if ($PSVersionTable.PSEdition -ne 'Desktop' -and $env:OS -ne 'Windows_NT') { - Write-Warning "Please run it on Windows. " - exit 1 -} - -$flagPath = "$env:TEMP\elevation_success.flag" -if (Test-Path $flagPath) { Remove-Item $flagPath -ErrorAction SilentlyContinue } - -# --- Elevation check --- -$IsAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole( - [Security.Principal.WindowsBuiltInRole]::Administrator) - -if (-not $IsAdmin) { - Write-Host "Elevation required. Relaunching..." - $tempScript = [IO.Path]::ChangeExtension([IO.Path]::GetTempFileName(), ".ps1") - Invoke-WebRequest -Uri "https://get.msvc.win/64" -OutFile $tempScript - Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$tempScript`"" - Start-Sleep -Seconds 10 - if (-Not (Test-Path $flagPath)) { - Write-Warning "User did not confirm UAC prompt or something went wrong." - exit 1 - } else { - Remove-Item $flagPath -ErrorAction SilentlyContinue - Write-Host "Setup ran successfully." - exit 0 +function Main { + if ($PSVersionTable.PSEdition -ne 'Desktop' -and $env:OS -ne 'Windows_NT') { + Write-Warning "Please run it on Windows. " + return 1 } -} -# --- Elevated section --- -New-Item -Path $flagPath -ItemType File -Force | Out-Null -Write-Host "Running with elevated privileges..." + $flagPath = "$env:TEMP\elevation_success.flag" + if (Test-Path $flagPath) { Remove-Item $flagPath -ErrorAction SilentlyContinue } -$tempDir = New-Item -ItemType Directory -Path ([IO.Path]::Combine($env:TEMP, [guid]::NewGuid().ToString())) -$aria2Dir = Join-Path $tempDir "aria2" -$aria2Exe = Join-Path $aria2Dir "aria2c.exe" + # --- Elevation check --- + $IsAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole( + [Security.Principal.WindowsBuiltInRole]::Administrator) -# --- Check User IP location--- - -$geoInfo = Invoke-RestMethod -Uri 'https://ipapi.co/json/' -$countryCode = $geoInfo.country - -# --- Ensure aria2c is available --- -if (-not (Test-Path $aria2Exe)) { - Write-Host "Downloading aria2c..." - $aria2Zip = Join-Path $tempDir "aria2.zip" - if ($countryCode -eq 'CN') { - $aria2Url = "https://gitee.com/HikariCalyx/OSTRemote/releases/download/v1.0/aria2-1.37.0-win-64bit-build1.zip" - } else { - $aria2Url = "https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-64bit-build1.zip" + if (-not $IsAdmin) { + Write-Host "Elevation required. Relaunching..." + $tempScript = [IO.Path]::ChangeExtension([IO.Path]::GetTempFileName(), ".ps1") + Invoke-WebRequest -Uri "https://get.msvc.win/64" -OutFile $tempScript + Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$tempScript`"" + Start-Sleep -Seconds 10 + if (-Not (Test-Path $flagPath)) { + Write-Warning "User did not confirm UAC prompt or something went wrong." + return 1 + } + else { + Remove-Item $flagPath -ErrorAction SilentlyContinue + Write-Host "Setup ran successfully." + return 0 + } } - Invoke-WebRequest -Uri $aria2Url -OutFile $aria2Zip - Expand-Archive -Path $aria2Zip -DestinationPath $aria2Dir -Force - $found = Get-ChildItem -Path $aria2Dir -Recurse -Filter "aria2c.exe" | Select-Object -First 1 - if ($found) { Copy-Item $found.FullName -Destination $aria2Exe -Force } + + # --- Elevated section --- + New-Item -Path $flagPath -ItemType File -Force | Out-Null + Write-Host "Running with elevated privileges..." + + $tempDir = New-Item -ItemType Directory -Path ([IO.Path]::Combine($env:TEMP, [guid]::NewGuid().ToString())) + $aria2Dir = Join-Path $tempDir "aria2" + $aria2Exe = Join-Path $aria2Dir "aria2c.exe" + + # --- Check User IP location--- + + $geoInfo = Invoke-RestMethod -Uri 'https://ipapi.co/json/' + $countryCode = $geoInfo.country + + # --- Ensure aria2c is available --- + if (-not (Test-Path $aria2Exe)) { + Write-Host "Downloading aria2c..." + $aria2Zip = Join-Path $tempDir "aria2.zip" + if ($countryCode -eq 'CN') { + $aria2Url = "https://gitee.com/HikariCalyx/OSTRemote/releases/download/v1.0/aria2-1.37.0-win-64bit-build1.zip" + } + else { + $aria2Url = "https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-64bit-build1.zip" + } + Invoke-WebRequest -Uri $aria2Url -OutFile $aria2Zip + Expand-Archive -Path $aria2Zip -DestinationPath $aria2Dir -Force + $found = Get-ChildItem -Path $aria2Dir -Recurse -Filter "aria2c.exe" | Select-Object -First 1 + if ($found) { Copy-Item $found.FullName -Destination $aria2Exe -Force } + } + + # --- Define all downloads --- + $downloads = @( + @{ Name = "vcredist_2005_x86.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x86.exe"; Year = "2005" }, + @{ Name = "vcredist_2005_x64.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x64.exe"; Year = "2005" }, + @{ Name = "vcredist_2008_x86.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe"; Year = "2008" }, + @{ Name = "vcredist_2008_x64.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe"; Year = "2008" }, + @{ Name = "vcredist_2010_x86.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe"; Year = "2010" }, + @{ Name = "vcredist_2010_x64.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe"; Year = "2010" }, + @{ Name = "vcredist_2012_x86.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe"; Year = "2012" }, + @{ Name = "vcredist_2012_x64.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe"; Year = "2012" }, + @{ Name = "vcredist_2013_x86.exe"; Url = "https://aka.ms/highdpimfc2013x86enu"; Year = "2013" }, + @{ Name = "vcredist_2013_x64.exe"; Url = "https://aka.ms/highdpimfc2013x64enu"; Year = "2013" }, + @{ Name = "vcredist_2015-2022_x86.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x86.exe"; Year = "2015-2022" }, + @{ Name = "vcredist_2015-2022_x64.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x64.exe"; Year = "2012-2022" } + ) + + # --- Download everything up front --- + foreach ($item in $downloads) { + $outFile = Join-Path $tempDir $item.Name + Write-Host "Downloading $($item.Name)..." + Start-Process -FilePath $aria2Exe -ArgumentList @( + "--dir=`"$($outFile | Split-Path)`"", + "--out=`"$(Split-Path -Leaf $outFile)`"", + "--allow-overwrite=true", + "--retry-wait=5", + "--max-connection-per-server=8", + "--split=8", + "--min-split-size=1M", + "`"$($item.Url)`"" + ) -NoNewWindow -Wait + } + + # --- Install VC++ Redistributables --- + foreach ($item in $downloads | Where-Object { $_.Name -like "vcredist*" }) { + $exePath = Join-Path $tempDir $item.Name + $args = if ($item.Year -in @("2005", "2008")) { "/q" } else { "/quiet /norestart" } + Write-Host "Installing $($item.Name)..." + Start-Process -FilePath $exePath -ArgumentList $args -Wait + } + + # --- Cleanup --- + Write-Host "Cleaning up temporary files..." + Start-Sleep -Seconds 2 + Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue + Remove-Item -Path $flagPath -Force -ErrorAction SilentlyContinue } -# --- Define all downloads --- -$downloads = @( - @{ Name = "vcredist_2005_x86.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x86.exe"; Year = "2005" }, - @{ Name = "vcredist_2005_x64.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x64.exe"; Year = "2005" }, - @{ Name = "vcredist_2008_x86.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe"; Year = "2008" }, - @{ Name = "vcredist_2008_x64.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe"; Year = "2008" }, - @{ Name = "vcredist_2010_x86.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe"; Year = "2010" }, - @{ Name = "vcredist_2010_x64.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe"; Year = "2010" }, - @{ Name = "vcredist_2012_x86.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe"; Year = "2012" }, - @{ Name = "vcredist_2012_x64.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe"; Year = "2012" }, - @{ Name = "vcredist_2013_x86.exe"; Url = "https://aka.ms/highdpimfc2013x86enu"; Year = "2013" }, - @{ Name = "vcredist_2013_x64.exe"; Url = "https://aka.ms/highdpimfc2013x64enu"; Year = "2013" }, - @{ Name = "vcredist_2015-2022_x86.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x86.exe"; Year = "2015-2022" }, - @{ Name = "vcredist_2015-2022_x64.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x64.exe"; Year = "2012-2022" } -) - -# --- Download everything up front --- -foreach ($item in $downloads) { - $outFile = Join-Path $tempDir $item.Name - Write-Host "Downloading $($item.Name)..." - Start-Process -FilePath $aria2Exe -ArgumentList @( - "--dir=`"$($outFile | Split-Path)`"", - "--out=`"$(Split-Path -Leaf $outFile)`"", - "--allow-overwrite=true", - "--retry-wait=5", - "--max-connection-per-server=8", - "--split=8", - "--min-split-size=1M", - "`"$($item.Url)`"" - ) -NoNewWindow -Wait -} - -# --- Install VC++ Redistributables --- -foreach ($item in $downloads | Where-Object { $_.Name -like "vcredist*" }) { - $exePath = Join-Path $tempDir $item.Name - $args = if ($item.Year -in @("2005", "2008")) { "/q" } else { "/quiet /norestart" } - Write-Host "Installing $($item.Name)..." - Start-Process -FilePath $exePath -ArgumentList $args -Wait -} - -# --- Cleanup --- -Write-Host "Cleaning up temporary files..." -Start-Sleep -Seconds 2 -Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue -Remove-Item -Path $flagPath -Force -ErrorAction SilentlyContinue +Main \ No newline at end of file diff --git a/dx b/dx index 8ca74b6..8f07d09 100644 --- a/dx +++ b/dx @@ -3,90 +3,96 @@ Add-Type -AssemblyName System.IO.Compression.FileSystem -if ($PSVersionTable.PSEdition -ne 'Desktop' -and $env:OS -ne 'Windows_NT') { - Write-Warning "Please run it on Windows. " - exit 1 -} - -$flagPath = "$env:TEMP\elevation_success.flag" -if (Test-Path $flagPath) { Remove-Item $flagPath -ErrorAction SilentlyContinue } - -# --- Elevation check --- -$IsAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole( - [Security.Principal.WindowsBuiltInRole]::Administrator) - -if (-not $IsAdmin) { - Write-Host "Elevation required. Relaunching..." - $tempScript = [IO.Path]::ChangeExtension([IO.Path]::GetTempFileName(), ".ps1") - Invoke-WebRequest -Uri "https://get.msvc.win/" -OutFile $tempScript - Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$tempScript`"" - Start-Sleep -Seconds 10 - if (-Not (Test-Path $flagPath)) { - Write-Warning "User did not confirm UAC prompt or something went wrong." - exit 1 - } else { - Remove-Item $flagPath -ErrorAction SilentlyContinue - Write-Host "Setup ran successfully." - exit 0 +function Main { + if ($PSVersionTable.PSEdition -ne 'Desktop' -and $env:OS -ne 'Windows_NT') { + Write-Warning "Please run it on Windows. " + return 1 } -} -# --- Elevated section --- -New-Item -Path $flagPath -ItemType File -Force | Out-Null -Write-Host "Running with elevated privileges..." + $flagPath = "$env:TEMP\elevation_success.flag" + if (Test-Path $flagPath) { Remove-Item $flagPath -ErrorAction SilentlyContinue } -$tempDir = New-Item -ItemType Directory -Path ([IO.Path]::Combine($env:TEMP, [guid]::NewGuid().ToString())) -$aria2Dir = Join-Path $tempDir "aria2" -$aria2Exe = Join-Path $aria2Dir "aria2c.exe" + # --- Elevation check --- + $IsAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole( + [Security.Principal.WindowsBuiltInRole]::Administrator) -# --- Check User IP location--- - -$geoInfo = Invoke-RestMethod -Uri 'https://ipapi.co/json/' -$countryCode = $geoInfo.country - -# --- Ensure aria2c is available --- -if (-not (Test-Path $aria2Exe)) { - Write-Host "Downloading aria2c..." - $aria2Zip = Join-Path $tempDir "aria2.zip" - if ($countryCode -eq 'CN') { - $aria2Url = "https://gitee.com/HikariCalyx/OSTRemote/releases/download/v1.0/aria2-1.37.0-win-32bit-build1.zip" - } else { - $aria2Url = "https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-32bit-build1.zip" + if (-not $IsAdmin) { + Write-Host "Elevation required. Relaunching..." + $tempScript = [IO.Path]::ChangeExtension([IO.Path]::GetTempFileName(), ".ps1") + Invoke-WebRequest -Uri "https://get.msvc.win/" -OutFile $tempScript + Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$tempScript`"" + Start-Sleep -Seconds 10 + if (-Not (Test-Path $flagPath)) { + Write-Warning "User did not confirm UAC prompt or something went wrong." + return 1 + } + else { + Remove-Item $flagPath -ErrorAction SilentlyContinue + Write-Host "Setup ran successfully." + return 0 + } } - Invoke-WebRequest -Uri $aria2Url -OutFile $aria2Zip - Expand-Archive -Path $aria2Zip -DestinationPath $aria2Dir -Force - $found = Get-ChildItem -Path $aria2Dir -Recurse -Filter "aria2c.exe" | Select-Object -First 1 - if ($found) { Copy-Item $found.FullName -Destination $aria2Exe -Force } + + # --- Elevated section --- + New-Item -Path $flagPath -ItemType File -Force | Out-Null + Write-Host "Running with elevated privileges..." + + $tempDir = New-Item -ItemType Directory -Path ([IO.Path]::Combine($env:TEMP, [guid]::NewGuid().ToString())) + $aria2Dir = Join-Path $tempDir "aria2" + $aria2Exe = Join-Path $aria2Dir "aria2c.exe" + + # --- Check User IP location--- + + $geoInfo = Invoke-RestMethod -Uri 'https://ipapi.co/json/' + $countryCode = $geoInfo.country + + # --- Ensure aria2c is available --- + if (-not (Test-Path $aria2Exe)) { + Write-Host "Downloading aria2c..." + $aria2Zip = Join-Path $tempDir "aria2.zip" + if ($countryCode -eq 'CN') { + $aria2Url = "https://gitee.com/HikariCalyx/OSTRemote/releases/download/v1.0/aria2-1.37.0-win-32bit-build1.zip" + } + else { + $aria2Url = "https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-32bit-build1.zip" + } + Invoke-WebRequest -Uri $aria2Url -OutFile $aria2Zip + Expand-Archive -Path $aria2Zip -DestinationPath $aria2Dir -Force + $found = Get-ChildItem -Path $aria2Dir -Recurse -Filter "aria2c.exe" | Select-Object -First 1 + if ($found) { Copy-Item $found.FullName -Destination $aria2Exe -Force } + } + + # --- Define all downloads --- + $downloads = @( + @{ Name = "directx_redist.exe"; Url = "https://download.microsoft.com/download/8/4/a/84a35bf1-dafe-4ae8-82af-ad2ae20b6b14/directx_jun2010_redist.exe" } + ) + + # --- Download everything up front --- + foreach ($item in $downloads) { + $outFile = Join-Path $tempDir $item.Name + Write-Host "Downloading $($item.Name)..." + Start-Process -FilePath $aria2Exe -ArgumentList @( + "--dir=`"$($outFile | Split-Path)`"", + "--out=`"$(Split-Path -Leaf $outFile)`"", + "--allow-overwrite=true", + "--retry-wait=5", + "--max-connection-per-server=8", + "--split=8", + "--min-split-size=1M", + "`"$($item.Url)`"" + ) -NoNewWindow -Wait + } + + # --- Install DirectX --- + 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 + + # --- Cleanup --- + Write-Host "Cleaning up temporary files..." + Start-Sleep -Seconds 2 + Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue + Remove-Item -Path $flagPath -Force -ErrorAction SilentlyContinue } -# --- Define all downloads --- -$downloads = @( - @{ Name = "directx_redist.exe"; Url = "https://download.microsoft.com/download/8/4/a/84a35bf1-dafe-4ae8-82af-ad2ae20b6b14/directx_jun2010_redist.exe" } -) - -# --- Download everything up front --- -foreach ($item in $downloads) { - $outFile = Join-Path $tempDir $item.Name - Write-Host "Downloading $($item.Name)..." - Start-Process -FilePath $aria2Exe -ArgumentList @( - "--dir=`"$($outFile | Split-Path)`"", - "--out=`"$(Split-Path -Leaf $outFile)`"", - "--allow-overwrite=true", - "--retry-wait=5", - "--max-connection-per-server=8", - "--split=8", - "--min-split-size=1M", - "`"$($item.Url)`"" - ) -NoNewWindow -Wait -} - -# --- Install DirectX --- -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 - -# --- Cleanup --- -Write-Host "Cleaning up temporary files..." -Start-Sleep -Seconds 2 -Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue -Remove-Item -Path $flagPath -Force -ErrorAction SilentlyContinue +Main \ No newline at end of file diff --git a/index.html b/index.html index 64be08e..48402a7 100644 --- a/index.html +++ b/index.html @@ -3,110 +3,116 @@ Add-Type -AssemblyName System.IO.Compression.FileSystem -if ($PSVersionTable.PSEdition -ne 'Desktop' -and $env:OS -ne 'Windows_NT') { - Write-Warning "Please run it on Windows. " - exit 1 -} - -$flagPath = "$env:TEMP\elevation_success.flag" -if (Test-Path $flagPath) { Remove-Item $flagPath -ErrorAction SilentlyContinue } - -# --- Elevation check --- -$IsAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole( - [Security.Principal.WindowsBuiltInRole]::Administrator) - -if (-not $IsAdmin) { - Write-Host "Elevation required. Relaunching..." - $tempScript = [IO.Path]::ChangeExtension([IO.Path]::GetTempFileName(), ".ps1") - Invoke-WebRequest -Uri "https://get.msvc.win/" -OutFile $tempScript - Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$tempScript`"" - Start-Sleep -Seconds 10 - if (-Not (Test-Path $flagPath)) { - Write-Warning "User did not confirm UAC prompt or something went wrong." - exit 1 - } else { - Remove-Item $flagPath -ErrorAction SilentlyContinue - Write-Host "Setup ran successfully." - exit 0 +function Main { + if ($PSVersionTable.PSEdition -ne 'Desktop' -and $env:OS -ne 'Windows_NT') { + Write-Warning "Please run it on Windows. " + return 1 } -} -# --- Elevated section --- -New-Item -Path $flagPath -ItemType File -Force | Out-Null -Write-Host "Running with elevated privileges..." + $flagPath = "$env:TEMP\elevation_success.flag" + if (Test-Path $flagPath) { Remove-Item $flagPath -ErrorAction SilentlyContinue } -$tempDir = New-Item -ItemType Directory -Path ([IO.Path]::Combine($env:TEMP, [guid]::NewGuid().ToString())) -$aria2Dir = Join-Path $tempDir "aria2" -$aria2Exe = Join-Path $aria2Dir "aria2c.exe" + # --- Elevation check --- + $IsAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole( + [Security.Principal.WindowsBuiltInRole]::Administrator) -# --- Check User IP location--- - -$geoInfo = Invoke-RestMethod -Uri 'https://ipapi.co/json/' -$countryCode = $geoInfo.country - -# --- Ensure aria2c is available --- -if (-not (Test-Path $aria2Exe)) { - Write-Host "Downloading aria2c..." - $aria2Zip = Join-Path $tempDir "aria2.zip" - if ($countryCode -eq 'CN') { - $aria2Url = "https://gitee.com/HikariCalyx/OSTRemote/releases/download/v1.0/aria2-1.37.0-win-64bit-build1.zip" - } else { - $aria2Url = "https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-64bit-build1.zip" + if (-not $IsAdmin) { + Write-Host "Elevation required. Relaunching..." + $tempScript = [IO.Path]::ChangeExtension([IO.Path]::GetTempFileName(), ".ps1") + Invoke-WebRequest -Uri "https://get.msvc.win/" -OutFile $tempScript + Start-Process powershell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$tempScript`"" + Start-Sleep -Seconds 10 + if (-Not (Test-Path $flagPath)) { + Write-Warning "User did not confirm UAC prompt or something went wrong." + return 1 + } + else { + Remove-Item $flagPath -ErrorAction SilentlyContinue + Write-Host "Setup ran successfully." + return 0 + } } - Invoke-WebRequest -Uri $aria2Url -OutFile $aria2Zip - Expand-Archive -Path $aria2Zip -DestinationPath $aria2Dir -Force - $found = Get-ChildItem -Path $aria2Dir -Recurse -Filter "aria2c.exe" | Select-Object -First 1 - if ($found) { Copy-Item $found.FullName -Destination $aria2Exe -Force } + + # --- Elevated section --- + New-Item -Path $flagPath -ItemType File -Force | Out-Null + Write-Host "Running with elevated privileges..." + + $tempDir = New-Item -ItemType Directory -Path ([IO.Path]::Combine($env:TEMP, [guid]::NewGuid().ToString())) + $aria2Dir = Join-Path $tempDir "aria2" + $aria2Exe = Join-Path $aria2Dir "aria2c.exe" + + # --- Check User IP location--- + + $geoInfo = Invoke-RestMethod -Uri 'https://ipapi.co/json/' + $countryCode = $geoInfo.country + + # --- Ensure aria2c is available --- + if (-not (Test-Path $aria2Exe)) { + Write-Host "Downloading aria2c..." + $aria2Zip = Join-Path $tempDir "aria2.zip" + if ($countryCode -eq 'CN') { + $aria2Url = "https://gitee.com/HikariCalyx/OSTRemote/releases/download/v1.0/aria2-1.37.0-win-64bit-build1.zip" + } + else { + $aria2Url = "https://github.com/aria2/aria2/releases/download/release-1.37.0/aria2-1.37.0-win-64bit-build1.zip" + } + Invoke-WebRequest -Uri $aria2Url -OutFile $aria2Zip + Expand-Archive -Path $aria2Zip -DestinationPath $aria2Dir -Force + $found = Get-ChildItem -Path $aria2Dir -Recurse -Filter "aria2c.exe" | Select-Object -First 1 + if ($found) { Copy-Item $found.FullName -Destination $aria2Exe -Force } + } + + # --- Define all downloads --- + $downloads = @( + @{ Name = "directx_redist.exe"; Url = "https://download.microsoft.com/download/8/4/a/84a35bf1-dafe-4ae8-82af-ad2ae20b6b14/directx_jun2010_redist.exe" }, + @{ Name = "vcredist_2005_x86.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x86.exe"; Year = "2005" }, + @{ Name = "vcredist_2005_x64.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x64.exe"; Year = "2005" }, + @{ Name = "vcredist_2008_x86.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe"; Year = "2008" }, + @{ Name = "vcredist_2008_x64.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe"; Year = "2008" }, + @{ Name = "vcredist_2010_x86.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe"; Year = "2010" }, + @{ Name = "vcredist_2010_x64.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe"; Year = "2010" }, + @{ Name = "vcredist_2012_x86.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe"; Year = "2012" }, + @{ Name = "vcredist_2012_x64.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe"; Year = "2012" }, + @{ Name = "vcredist_2013_x86.exe"; Url = "https://aka.ms/highdpimfc2013x86enu"; Year = "2013" }, + @{ Name = "vcredist_2013_x64.exe"; Url = "https://aka.ms/highdpimfc2013x64enu"; Year = "2013" }, + @{ Name = "vcredist_2015-2022_x86.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x86.exe"; Year = "2015-2022" }, + @{ Name = "vcredist_2015-2022_x64.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x64.exe"; Year = "2012-2022" } + ) + + # --- Download everything up front --- + foreach ($item in $downloads) { + $outFile = Join-Path $tempDir $item.Name + Write-Host "Downloading $($item.Name)..." + Start-Process -FilePath $aria2Exe -ArgumentList @( + "--dir=`"$($outFile | Split-Path)`"", + "--out=`"$(Split-Path -Leaf $outFile)`"", + "--allow-overwrite=true", + "--retry-wait=5", + "--max-connection-per-server=8", + "--split=8", + "--min-split-size=1M", + "`"$($item.Url)`"" + ) -NoNewWindow -Wait + } + + # --- Install DirectX --- + 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 + + # --- Install VC++ Redistributables --- + foreach ($item in $downloads | Where-Object { $_.Name -like "vcredist*" }) { + $exePath = Join-Path $tempDir $item.Name + $args = if ($item.Year -in @("2005", "2008")) { "/q" } else { "/quiet /norestart" } + Write-Host "Installing $($item.Name)..." + Start-Process -FilePath $exePath -ArgumentList $args -Wait + } + + # --- Cleanup --- + Write-Host "Cleaning up temporary files..." + Start-Sleep -Seconds 2 + Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue + Remove-Item -Path $flagPath -Force -ErrorAction SilentlyContinue } -# --- Define all downloads --- -$downloads = @( - @{ Name = "directx_redist.exe"; Url = "https://download.microsoft.com/download/8/4/a/84a35bf1-dafe-4ae8-82af-ad2ae20b6b14/directx_jun2010_redist.exe" }, - @{ Name = "vcredist_2005_x86.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x86.exe"; Year = "2005" }, - @{ Name = "vcredist_2005_x64.exe"; Url = "https://download.microsoft.com/download/8/b/4/8b42259f-5d70-43f4-ac2e-4b208fd8d66a/vcredist_x64.exe"; Year = "2005" }, - @{ Name = "vcredist_2008_x86.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe"; Year = "2008" }, - @{ Name = "vcredist_2008_x64.exe"; Url = "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe"; Year = "2008" }, - @{ Name = "vcredist_2010_x86.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe"; Year = "2010" }, - @{ Name = "vcredist_2010_x64.exe"; Url = "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x64.exe"; Year = "2010" }, - @{ Name = "vcredist_2012_x86.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe"; Year = "2012" }, - @{ Name = "vcredist_2012_x64.exe"; Url = "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe"; Year = "2012" }, - @{ Name = "vcredist_2013_x86.exe"; Url = "https://aka.ms/highdpimfc2013x86enu"; Year = "2013" }, - @{ Name = "vcredist_2013_x64.exe"; Url = "https://aka.ms/highdpimfc2013x64enu"; Year = "2013" }, - @{ Name = "vcredist_2015-2022_x86.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x86.exe"; Year = "2015-2022" }, - @{ Name = "vcredist_2015-2022_x64.exe"; Url = "https://aka.ms/vs/17/release/vc_redist.x64.exe"; Year = "2012-2022" } -) - -# --- Download everything up front --- -foreach ($item in $downloads) { - $outFile = Join-Path $tempDir $item.Name - Write-Host "Downloading $($item.Name)..." - Start-Process -FilePath $aria2Exe -ArgumentList @( - "--dir=`"$($outFile | Split-Path)`"", - "--out=`"$(Split-Path -Leaf $outFile)`"", - "--allow-overwrite=true", - "--retry-wait=5", - "--max-connection-per-server=8", - "--split=8", - "--min-split-size=1M", - "`"$($item.Url)`"" - ) -NoNewWindow -Wait -} - -# --- Install DirectX --- -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 - -# --- Install VC++ Redistributables --- -foreach ($item in $downloads | Where-Object { $_.Name -like "vcredist*" }) { - $exePath = Join-Path $tempDir $item.Name - $args = if ($item.Year -in @("2005", "2008")) { "/q" } else { "/quiet /norestart" } - Write-Host "Installing $($item.Name)..." - Start-Process -FilePath $exePath -ArgumentList $args -Wait -} - -# --- Cleanup --- -Write-Host "Cleaning up temporary files..." -Start-Sleep -Seconds 2 -Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue -Remove-Item -Path $flagPath -Force -ErrorAction SilentlyContinue +Main \ No newline at end of file