You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.6 KiB
129 lines
3.6 KiB
# Auto-elevate to admin rights if not already running as admin
|
|
if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
|
|
Write-Host "Requesting administrator privileges..."
|
|
$arguments = "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" -ExecutionFromElevated"
|
|
Start-Process powershell.exe -ArgumentList $arguments -Verb RunAs
|
|
Exit
|
|
}
|
|
|
|
# Set TLS to 1.2
|
|
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
|
|
|
# Colors for output
|
|
$Red = "`e[31m"
|
|
$Green = "`e[32m"
|
|
$Blue = "`e[36m"
|
|
$Yellow = "`e[33m"
|
|
$Reset = "`e[0m"
|
|
|
|
# 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 "${Red}Error: $_${Reset}"
|
|
Cleanup
|
|
exit 1
|
|
}
|
|
|
|
# Detect system architecture
|
|
function Get-SystemArch {
|
|
if ([Environment]::Is64BitOperatingSystem) {
|
|
return "x64"
|
|
} else {
|
|
return "x86"
|
|
}
|
|
}
|
|
|
|
# Download with progress
|
|
function Download-WithProgress {
|
|
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 "${Red}Failed to download: $_${Reset}"
|
|
return $false
|
|
}
|
|
}
|
|
|
|
# Main installation function
|
|
function Install-CursorModifier {
|
|
Write-Host "${Blue}Starting installation...${Reset}"
|
|
|
|
# Detect architecture
|
|
$arch = Get-SystemArch
|
|
Write-Host "${Green}Detected architecture: $arch${Reset}"
|
|
|
|
# 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/dacrab/go-cursor-help/releases/latest"
|
|
$binaryName = "cursor-id-modifier.exe"
|
|
$downloadUrl = $latestRelease.assets | Where-Object { $_.name -eq $binaryName } | Select-Object -ExpandProperty browser_download_url
|
|
|
|
if (!$downloadUrl) {
|
|
throw "Could not find download URL for $binaryName"
|
|
}
|
|
}
|
|
catch {
|
|
Write-Host "${Red}Failed to get latest release: $_${Reset}"
|
|
exit 1
|
|
}
|
|
|
|
# Download binary
|
|
Write-Host "${Blue}Downloading latest release...${Reset}"
|
|
$binaryPath = Join-Path $TmpDir "cursor-id-modifier.exe"
|
|
|
|
if (!(Download-WithProgress -Url $downloadUrl -OutputFile $binaryPath)) {
|
|
exit 1
|
|
}
|
|
|
|
# Install binary
|
|
Write-Host "${Blue}Installing...${Reset}"
|
|
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 "${Red}Failed to install: $_${Reset}"
|
|
exit 1
|
|
}
|
|
|
|
Write-Host "${Green}Installation completed successfully!${Reset}"
|
|
Write-Host "${Blue}You can now run: cursor-id-modifier${Reset}"
|
|
}
|
|
|
|
# Run installation
|
|
try {
|
|
Install-CursorModifier
|
|
}
|
|
finally {
|
|
Cleanup
|
|
}
|