mirror of
https://github.com/yuaotian/go-cursor-help.git
synced 2025-06-08 04:22:06 +08:00

- Commented out the version assignment in the prepareUpdatedConfig function within the config.go file to prevent hardcoding of the version number. - This change allows for more dynamic version handling in the configuration process, aligning with recent updates in the installation scripts that utilize the latest release tag for versioning.
193 lines
6.3 KiB
PowerShell
193 lines
6.3 KiB
PowerShell
# Check for admin rights and handle elevation
|
|
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
|
|
if (-NOT $isAdmin) {
|
|
# Detect PowerShell version and path
|
|
$pwshPath = if (Get-Command "pwsh" -ErrorAction SilentlyContinue) {
|
|
(Get-Command "pwsh").Source # PowerShell 7+
|
|
} elseif (Test-Path "$env:ProgramFiles\PowerShell\7\pwsh.exe") {
|
|
"$env:ProgramFiles\PowerShell\7\pwsh.exe"
|
|
} else {
|
|
"powershell.exe" # Windows PowerShell
|
|
}
|
|
|
|
try {
|
|
Write-Host "`nRequesting administrator privileges..." -ForegroundColor Cyan
|
|
$scriptPath = $MyInvocation.MyCommand.Path
|
|
$argList = "-NoProfile -ExecutionPolicy Bypass -File `"$scriptPath`""
|
|
Start-Process -FilePath $pwshPath -Verb RunAs -ArgumentList $argList -Wait
|
|
exit
|
|
}
|
|
catch {
|
|
Write-Host "`nError: Administrator privileges required" -ForegroundColor Red
|
|
Write-Host "Please run this script from an Administrator PowerShell window" -ForegroundColor Yellow
|
|
Write-Host "`nTo do this:" -ForegroundColor Cyan
|
|
Write-Host "1. Press Win + X" -ForegroundColor White
|
|
Write-Host "2. Click 'Windows Terminal (Admin)' or 'PowerShell (Admin)'" -ForegroundColor White
|
|
Write-Host "3. Run the installation command again" -ForegroundColor White
|
|
Write-Host "`nPress enter to exit..."
|
|
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# Set TLS to 1.2
|
|
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
|
|
|
# Create temporary directory
|
|
$TmpDir = Join-Path $env:TEMP ([System.Guid]::NewGuid().ToString())
|
|
New-Item -ItemType Directory -Path $TmpDir | Out-Null
|
|
|
|
# Cleanup function
|
|
function Cleanup {
|
|
if (Test-Path $TmpDir) {
|
|
Remove-Item -Recurse -Force $TmpDir
|
|
}
|
|
}
|
|
|
|
# Error handler
|
|
trap {
|
|
Write-Host "Error: $_" -ForegroundColor Red
|
|
Cleanup
|
|
Write-Host "Press enter to exit..."
|
|
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
|
|
exit 1
|
|
}
|
|
|
|
# Detect system architecture
|
|
function Get-SystemArch {
|
|
if ([Environment]::Is64BitOperatingSystem) {
|
|
return "x86_64"
|
|
} else {
|
|
return "i386"
|
|
}
|
|
}
|
|
|
|
# Download with progress
|
|
function Get-FileWithProgress {
|
|
param (
|
|
[string]$Url,
|
|
[string]$OutputFile
|
|
)
|
|
|
|
try {
|
|
$webClient = New-Object System.Net.WebClient
|
|
$webClient.Headers.Add("User-Agent", "PowerShell Script")
|
|
|
|
$webClient.DownloadFile($Url, $OutputFile)
|
|
return $true
|
|
}
|
|
catch {
|
|
Write-Host "Failed to download: $_" -ForegroundColor Red
|
|
return $false
|
|
}
|
|
}
|
|
|
|
# Main installation function
|
|
function Install-CursorModifier {
|
|
Write-Host "Starting installation..." -ForegroundColor Cyan
|
|
|
|
# Detect architecture
|
|
$arch = Get-SystemArch
|
|
Write-Host "Detected architecture: $arch" -ForegroundColor Green
|
|
|
|
# Set installation directory
|
|
$InstallDir = "$env:ProgramFiles\CursorModifier"
|
|
if (!(Test-Path $InstallDir)) {
|
|
New-Item -ItemType Directory -Path $InstallDir | Out-Null
|
|
}
|
|
|
|
# Get latest release
|
|
try {
|
|
$latestRelease = Invoke-RestMethod -Uri "https://api.github.com/repos/yuaotian/go-cursor-help/releases/latest"
|
|
Write-Host "Found latest release: $($latestRelease.tag_name)" -ForegroundColor Cyan
|
|
|
|
# Look for Windows binary with our architecture
|
|
$version = $latestRelease.tag_name.TrimStart('v')
|
|
Write-Host "Version: $version" -ForegroundColor Cyan
|
|
$possibleNames = @(
|
|
"cursor-id-modifier_${version}_windows_x86_64.exe",
|
|
"cursor-id-modifier_${version}_windows_$($arch).exe"
|
|
)
|
|
|
|
$asset = $null
|
|
foreach ($name in $possibleNames) {
|
|
Write-Host "Checking for asset: $name" -ForegroundColor Cyan
|
|
$asset = $latestRelease.assets | Where-Object { $_.name -eq $name }
|
|
if ($asset) {
|
|
Write-Host "Found matching asset: $($asset.name)" -ForegroundColor Green
|
|
break
|
|
}
|
|
}
|
|
|
|
if (!$asset) {
|
|
Write-Host "`nAvailable assets:" -ForegroundColor Yellow
|
|
$latestRelease.assets | ForEach-Object { Write-Host "- $($_.name)" }
|
|
throw "Could not find appropriate Windows binary for $arch architecture"
|
|
}
|
|
|
|
$downloadUrl = $asset.browser_download_url
|
|
}
|
|
catch {
|
|
Write-Host "Failed to get latest release: $_" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
# Download binary
|
|
Write-Host "`nDownloading latest release..." -ForegroundColor Cyan
|
|
$binaryPath = Join-Path $TmpDir "cursor-id-modifier.exe"
|
|
|
|
if (!(Get-FileWithProgress -Url $downloadUrl -OutputFile $binaryPath)) {
|
|
exit 1
|
|
}
|
|
|
|
# Install binary
|
|
Write-Host "Installing..." -ForegroundColor Cyan
|
|
try {
|
|
Copy-Item -Path $binaryPath -Destination "$InstallDir\cursor-id-modifier.exe" -Force
|
|
|
|
# Add to PATH if not already present
|
|
$currentPath = [Environment]::GetEnvironmentVariable("Path", "Machine")
|
|
if ($currentPath -notlike "*$InstallDir*") {
|
|
[Environment]::SetEnvironmentVariable("Path", "$currentPath;$InstallDir", "Machine")
|
|
}
|
|
}
|
|
catch {
|
|
Write-Host "Failed to install: $_" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
|
|
Write-Host "Installation completed successfully!" -ForegroundColor Green
|
|
Write-Host "Running cursor-id-modifier..." -ForegroundColor Cyan
|
|
|
|
# Run the program
|
|
try {
|
|
& "$InstallDir\cursor-id-modifier.exe"
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host "Failed to run cursor-id-modifier" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
}
|
|
catch {
|
|
Write-Host "Failed to run cursor-id-modifier: $_" -ForegroundColor Red
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# Run installation
|
|
try {
|
|
Install-CursorModifier
|
|
}
|
|
catch {
|
|
Write-Host "Installation failed: $_" -ForegroundColor Red
|
|
Cleanup
|
|
Write-Host "Press enter to exit..."
|
|
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
|
|
exit 1
|
|
}
|
|
finally {
|
|
Cleanup
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host "Press enter to exit..." -ForegroundColor Green
|
|
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
|
|
}
|
|
} |