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
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 ""
|