devin15/cursor2api-rust
0
1# ���ô���ʱִֹͣ��2$ErrorActionPreference = "Stop"3$ProgressPreference = "SilentlyContinue" # �ӿ������ٶ�4 5# ��ɫ�������6function Write-Info { param($Message) Write-Host "[INFO] $Message" -ForegroundColor Blue }7function Write-Warn { param($Message) Write-Host "[WARN] $Message" -ForegroundColor Yellow }8function Write-Success { param($Message) Write-Host "[SUCCESS] $Message" -ForegroundColor Green }9function Write-Error { param($Message) Write-Host "[ERROR] $Message" -ForegroundColor Red; exit 1 }10 11# ������ԱȨ��12function Test-Administrator {13 $user = [Security.Principal.WindowsIdentity]::GetCurrent()14 $principal = New-Object Security.Principal.WindowsPrincipal $user15 return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)16}17 18if (-not (Test-Administrator)) {19 Write-Error "���Թ���ԱȨ�����д˽ű�"20}21 22# ������Ϣ23function Show-Help {24 Write-Host @"25�÷�: $(Split-Path $MyInvocation.ScriptName -Leaf) [ѡ��]26 27ѡ��:28 -NoVS ����װ Visual Studio Build Tools29 -NoRust ����װ Rust30 -NoNode ����װ Node.js31 -Help ��ʾ�˰�����Ϣ32 33ʾ��:34 .\setup.ps135 .\setup.ps1 -NoVS36 .\setup.ps1 -NoRust -NoNode37"@38}39 40# ��������41param(42 [switch]$NoVS,43 [switch]$NoRust,44 [switch]$NoNode,45 [switch]$Help46)47 48if ($Help) {49 Show-Help50 exit 051}52 53# ��鲢��װ Chocolatey54function Install-Chocolatey {55 Write-Info "��� Chocolatey..."56 if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {57 Write-Info "��װ Chocolatey..."58 Set-ExecutionPolicy Bypass -Scope Process -Force59 [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 307260 try {61 Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))62 }63 catch {64 Write-Error "��װ Chocolatey ʧ��: $_"65 }66 # ˢ�»�������67 $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")68 }69}70 71# ��װ Visual Studio Build Tools72function Install-VSBuildTools {73 if ($NoVS) {74 Write-Info "���� Visual Studio Build Tools ��װ"75 return76 }77 78 Write-Info "��� Visual Studio Build Tools..."79 $vsPath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"80 if (-not (Test-Path $vsPath)) {81 Write-Info "��װ Visual Studio Build Tools..."82 try {83 # ���ذ�װ����84 $vsInstallerUrl = "https://aka.ms/vs/17/release/vs_BuildTools.exe"85 $vsInstallerPath = "$env:TEMP\vs_BuildTools.exe"86 Invoke-WebRequest -Uri $vsInstallerUrl -OutFile $vsInstallerPath87 88 # ��װ89 $process = Start-Process -FilePath $vsInstallerPath -ArgumentList `90 "--quiet", "--wait", "--norestart", "--nocache", `91 "--installPath", "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2022\BuildTools", `92 "--add", "Microsoft.VisualStudio.Workload.VCTools" `93 -NoNewWindow -Wait -PassThru94 95 if ($process.ExitCode -ne 0) {96 Write-Error "Visual Studio Build Tools ��װʧ��"97 }98 99 Remove-Item $vsInstallerPath -Force100 }101 catch {102 Write-Error "��װ Visual Studio Build Tools ʧ��: $_"103 }104 }105 else {106 Write-Info "Visual Studio Build Tools �Ѱ�װ"107 }108}109 110# ��װ Rust111function Install-Rust {112 if ($NoRust) {113 Write-Info "���� Rust ��װ"114 return115 }116 117 Write-Info "��� Rust..."118 if (-not (Get-Command rustc -ErrorAction SilentlyContinue)) {119 Write-Info "��װ Rust..."120 try {121 $rustupInit = "$env:TEMP\rustup-init.exe"122 Invoke-WebRequest -Uri "https://win.rustup.rs" -OutFile $rustupInit123 Start-Process -FilePath $rustupInit -ArgumentList "-y" -Wait124 Remove-Item $rustupInit -Force125 126 # ˢ�»�������127 $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")128 }129 catch {130 Write-Error "��װ Rust ʧ��: $_"131 }132 }133 134 # ����Ŀ��ƽ̨135 Write-Info "���� Rust Ŀ��ƽ̨..."136 $arch = if ([Environment]::Is64BitOperatingSystem) { "x86_64" } else { "i686" }137 rustup target add "$arch-pc-windows-msvc"138}139 140# ��װ��������141function Install-Tools {142 Write-Info "��װ��Ҫ����..."143 144 # ��װ protoc145 if (-not (Get-Command protoc -ErrorAction SilentlyContinue)) {146 Write-Info "��װ Protocol Buffers..."147 choco install -y protoc148 }149 150 # ��װ Git151 if (-not (Get-Command git -ErrorAction SilentlyContinue)) {152 Write-Info "��װ Git..."153 choco install -y git154 }155 156 # ��װ Node.js157 if (-not $NoNode -and -not (Get-Command node -ErrorAction SilentlyContinue)) {158 Write-Info "��װ Node.js..."159 choco install -y nodejs160 }161 162 # ˢ�»�������163 $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")164}165 166# ������167try {168 Write-Info "��ʼ��װ��Ҫ���..."169 170 Install-Chocolatey171 Install-VSBuildTools172 Install-Rust173 Install-Tools174 175 Write-Success "��װ��ɣ�"176}177catch {178 Write-Error "��װ�����г��ִ���: $_"179}