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.
 
 
 
 
 
 

216 lines
6.5 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..."
Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
Exit
}
# Set TLS to 1.2 / 设置 TLS 为 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"
# Messages / 消息
$EN_MESSAGES = @(
"Starting installation...",
"Detected architecture:",
"Only 64-bit Windows is supported",
"Latest version:",
"Creating installation directory...",
"Downloading latest release from:",
"Failed to download binary:",
"Downloaded file not found",
"Installing binary...",
"Failed to install binary:",
"Adding to PATH...",
"Cleaning up...",
"Installation completed successfully!",
"You can now use 'cursor-id-modifier' from any terminal (you may need to restart your terminal first)",
"Checking for running Cursor instances...",
"Found running Cursor processes. Attempting to close them...",
"Successfully closed all Cursor instances",
"Failed to close Cursor instances. Please close them manually",
"Backing up storage.json...",
"Backup created at:"
)
$CN_MESSAGES = @(
"开始安装...",
"检测到架构:",
"仅支持64位Windows系统",
"最新版本:",
"正在创建安装目录...",
"正在从以下地址下载最新版本:",
"下载二进制文件失败:",
"未找到下载的文件",
"正在安装程序...",
"安装二进制文件失败:",
"正在添加到PATH...",
"正在清理...",
"安装成功完成!",
"现在可以在任何终端中使用 'cursor-id-modifier' 了(可能需要重启终端)",
"正在检查运行中的Cursor进程...",
"发现正在运行的Cursor进程,尝试关闭...",
"成功关闭所有Cursor实例",
"无法关闭Cursor实例,请手动关闭",
"正在备份storage.json...",
"备份已创建于:"
)
# Detect system language / 检测系统语言
function Get-SystemLanguage {
if ((Get-Culture).Name -like "zh-CN") {
return "cn"
}
return "en"
}
# Get message based on language / 根据语言获取消息
function Get-Message($Index) {
$lang = Get-SystemLanguage
if ($lang -eq "cn") {
return $CN_MESSAGES[$Index]
}
return $EN_MESSAGES[$Index]
}
# Functions for colored output / 彩色输出函数
function Write-Status($Message) {
Write-Host "${Blue}[*]${Reset} $Message"
}
function Write-Success($Message) {
Write-Host "${Green}[✓]${Reset} $Message"
}
function Write-Warning($Message) {
Write-Host "${Yellow}[!]${Reset} $Message"
}
function Write-Error($Message) {
Write-Host "${Red}[✗]${Reset} $Message"
Exit 1
}
# Close Cursor instances / 关闭Cursor实例
function Close-CursorInstances {
Write-Status (Get-Message 14)
$cursorProcesses = Get-Process "Cursor" -ErrorAction SilentlyContinue
if ($cursorProcesses) {
Write-Status (Get-Message 15)
try {
$cursorProcesses | ForEach-Object { $_.CloseMainWindow() | Out-Null }
Start-Sleep -Seconds 2
$cursorProcesses | Where-Object { !$_.HasExited } | Stop-Process -Force
Write-Success (Get-Message 16)
} catch {
Write-Error (Get-Message 17)
}
}
}
# Backup storage.json / 备份storage.json
function Backup-StorageJson {
Write-Status (Get-Message 18)
$storageJsonPath = "$env:APPDATA\Cursor\User\globalStorage\storage.json"
if (Test-Path $storageJsonPath) {
$backupPath = "$storageJsonPath.backup"
Copy-Item -Path $storageJsonPath -Destination $backupPath -Force
Write-Success "$(Get-Message 19) $backupPath"
}
}
# Get latest release version from GitHub / 从GitHub获取最新版本
function Get-LatestVersion {
$repo = "yuaotian/go-cursor-help"
$release = Invoke-RestMethod -Uri "https://api.github.com/repos/$repo/releases/latest"
return $release.tag_name
}
# Main installation process / 主安装过程
Write-Status (Get-Message 0)
# Close any running Cursor instances
Close-CursorInstances
# Backup storage.json
Backup-StorageJson
# Get system architecture / 获取系统架构
$arch = if ([Environment]::Is64BitOperatingSystem) { "amd64" } else { "386" }
Write-Status "$(Get-Message 1) $arch"
if ($arch -ne "amd64") {
Write-Error (Get-Message 2)
}
# Get latest version / 获取最新版本
$version = Get-LatestVersion
Write-Status "$(Get-Message 3) $version"
# Set up paths / 设置路径
$installDir = "$env:ProgramFiles\cursor-id-modifier"
$binaryName = "cursor_id_modifier_${version}_windows_amd64.exe"
$downloadUrl = "https://github.com/yuaotian/go-cursor-help/releases/download/$version/$binaryName"
$tempFile = "$env:TEMP\$binaryName"
# Create installation directory / 创建安装目录
Write-Status (Get-Message 4)
if (-not (Test-Path $installDir)) {
New-Item -ItemType Directory -Path $installDir -Force | Out-Null
}
# Download binary / 下载二进制文件
Write-Status "$(Get-Message 5) $downloadUrl"
try {
Invoke-WebRequest -Uri $downloadUrl -OutFile $tempFile
} catch {
Write-Error "$(Get-Message 6) $_"
}
# Verify download / 验证下载
if (-not (Test-Path $tempFile)) {
Write-Error (Get-Message 7)
}
# Install binary / 安装二进制文件
Write-Status (Get-Message 8)
try {
Move-Item -Force $tempFile "$installDir\cursor-id-modifier.exe"
} catch {
Write-Error "$(Get-Message 9) $_"
}
# Add to PATH if not already present / 如果尚未添加则添加到PATH
$userPath = [Environment]::GetEnvironmentVariable("Path", "User")
if ($userPath -notlike "*$installDir*") {
Write-Status (Get-Message 10)
[Environment]::SetEnvironmentVariable(
"Path",
"$userPath;$installDir",
"User"
)
}
# Create shortcut in Start Menu / 在开始菜单创建快捷方式
$startMenuPath = "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\cursor-id-modifier.lnk"
$shell = New-Object -ComObject WScript.Shell
$shortcut = $shell.CreateShortcut($startMenuPath)
$shortcut.TargetPath = "$installDir\cursor-id-modifier.exe"
$shortcut.Save()
# Cleanup / 清理
Write-Status (Get-Message 11)
if (Test-Path $tempFile) {
Remove-Item -Force $tempFile
}
Write-Success (Get-Message 12)
Write-Success (Get-Message 13)
Write-Host ""