From 4365cd32d21be1eacdee1b3fd61ad7038867c5d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=85=8E=E9=A5=BC=E6=9E=9C=E5=AD=90=E5=8D=B7=E9=B2=A8?= =?UTF-8?q?=E9=B1=BC=E8=BE=A3=E6=A4=92?= Date: Wed, 8 Jan 2025 19:11:14 +0800 Subject: [PATCH] Refactor README.md and remove outdated Windows batch script - Updated README.md to replace references to the Windows reset script from a .bat file to a .ps1 file for improved compatibility with PowerShell. - Removed the obsolete cursor_win_id_modifier.bat script to streamline the project and eliminate redundancy. - Ensured clarity in installation instructions for domestic users by maintaining consistent formatting and updated download commands. --- README.md | 9 +- scripts/run/cursor_win_id_modifier.bat | 224 ------------------------- scripts/run/cursor_win_id_modifier.ps1 | 176 +++++++++++++++++++ 3 files changed, 180 insertions(+), 229 deletions(-) delete mode 100644 scripts/run/cursor_win_id_modifier.bat create mode 100644 scripts/run/cursor_win_id_modifier.ps1 diff --git a/README.md b/README.md index c633c78..6965132 100644 --- a/README.md +++ b/README.md @@ -73,11 +73,10 @@ irm https://raw.githubusercontent.com/yuaotian/go-cursor-help/master/scripts/ins ``` **国内用户快速安装** ```powershell -# 下载重置脚本 -curl -o "%TEMP%\cursor_reset.bat" "https://gh-proxy.com/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.bat" -# 执行重置脚本 -start "" "%TEMP%\cursor_reset.bat" +curl -o "%TEMP%\cursor_reset.bat" "https://gh-proxy.com/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.ps1 " + + ``` #### Windows Installation Features: @@ -225,7 +224,7 @@ irm https://raw.githubusercontent.com/yuaotian/go-cursor-help/master/scripts/ins **国内用户快速安装** ```powershell # 下载重置脚本 -curl -o "%TEMP%\cursor_reset.bat" "https://gh-proxy.com/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.bat" +curl -o "%TEMP%\cursor_reset.bat" "https://gh-proxy.com/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/run/cursor_win_id_modifier.ps1 " # 执行重置脚本 start "" "%TEMP%\cursor_reset.bat" diff --git a/scripts/run/cursor_win_id_modifier.bat b/scripts/run/cursor_win_id_modifier.bat deleted file mode 100644 index fb3e7f2..0000000 --- a/scripts/run/cursor_win_id_modifier.bat +++ /dev/null @@ -1,224 +0,0 @@ -@echo off -chcp 65001 >nul -setlocal EnableDelayedExpansion - -:: 颜色定义 -set "RED=[31m" -set "GREEN=[32m" -set "YELLOW=[33m" -set "BLUE=[34m" -set "NC=[0m" - -:: 配置文件路径 -set "STORAGE_FILE=%APPDATA%\Cursor\User\globalStorage\storage.json" -set "BACKUP_DIR=%APPDATA%\Cursor\User\globalStorage\backups" - -:: 检查管理员权限 -net session >nul 2>&1 -if %errorLevel% neq 0 ( - echo %RED%[错误]%NC% 请以管理员身份运行此脚本 - echo 请右键点击脚本,选择"以管理员身份运行" - pause - exit /b 1 -) - -:: 显示 Logo -cls -echo. -echo ██████╗██╗ ██╗██████╗ ███████╗ ██████╗ ██████╗ -echo ██╔════╝██║ ██║██╔══██╗██╔════╝██╔═══██╗██╔══██╗ -echo ██║ ██║ ██║██████╔╝███████╗██║ ██║██████╔╝ -echo ██║ ██║ ██║██╔══██╗╚════██║██║ ██║██╔══██╗ -echo ╚██████╗╚██████╔╝██║ ██║███████║╚██████╔╝██║ ██║ -echo ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝ -echo. -echo %BLUE%================================%NC% -echo %GREEN% Cursor ID 修改工具%NC% -echo %BLUE%================================%NC% -echo. - -:: 检查并关闭 Cursor 进程 -:: 定义最大重试次数和等待时间 -set "MAX_RETRIES=5" -set "WAIT_TIME=1" - -echo %GREEN%[信息]%NC% 检查 Cursor 进程... - -goto :main - -:check_process -setlocal -set "process_name=%~1" -tasklist /FI "IMAGENAME eq %process_name%" 2>NUL | find /I "%process_name%" >NUL -endlocal & exit /b %ERRORLEVEL% - -:get_process_details -setlocal -set "process_name=%~1" -echo %BLUE%[调试]%NC% 正在获取 %process_name% 进程详细信息: -wmic process where "name='%process_name%'" get ProcessId,ExecutablePath,CommandLine /format:list -endlocal -exit /b - -:main - -:: 处理 Cursor.exe -call :check_process "Cursor.exe" -if %ERRORLEVEL% equ 0 ( - echo %YELLOW%[警告]%NC% 发现 Cursor.exe 正在运行 - call :get_process_details "Cursor.exe" - - echo %YELLOW%[警告]%NC% 尝试关闭 Cursor.exe... - taskkill /F /IM "Cursor.exe" >NUL 2>&1 - - :: 循环检测进程是否真正关闭 - set "retry_count=0" - :retry_cursor - call :check_process "Cursor.exe" - if %ERRORLEVEL% equ 0 ( - set /a "retry_count+=1" - if !retry_count! geq %MAX_RETRIES% ( - echo %RED%[错误]%NC% 在 %MAX_RETRIES% 次尝试后仍无法关闭 Cursor.exe - call :get_process_details "Cursor.exe" - echo %RED%[错误]%NC% 请手动关闭进程后重试 - pause - exit /b 1 - ) - echo %YELLOW%[警告]%NC% 等待进程关闭,尝试 !retry_count!/%MAX_RETRIES%... - timeout /t %WAIT_TIME% /nobreak >NUL - goto retry_cursor - ) - echo %GREEN%[信息]%NC% Cursor.exe 已成功关闭 -) - -:: 处理 cursor.exe -call :check_process "cursor.exe" -if %ERRORLEVEL% equ 0 ( - echo %YELLOW%[警告]%NC% 发现 cursor.exe 正在运行 - call :get_process_details "cursor.exe" - - echo %YELLOW%[警告]%NC% 尝试关闭 cursor.exe... - taskkill /F /IM "cursor.exe" >NUL 2>&1 - - :: 循环检测进程是否真正关闭 - set "retry_count=0" - :retry_cursor_lower - call :check_process "cursor.exe" - if %ERRORLEVEL% equ 0 ( - set /a "retry_count+=1" - if !retry_count! geq %MAX_RETRIES% ( - echo %RED%[错误]%NC% 在 %MAX_RETRIES% 次尝试后仍无法关闭 cursor.exe - call :get_process_details "cursor.exe" - echo %RED%[错误]%NC% 请手动关闭进程后重试 - pause - exit /b 1 - ) - echo %YELLOW%[警告]%NC% 等待进程关闭,尝试 !retry_count!/%MAX_RETRIES%... - timeout /t %WAIT_TIME% /nobreak >NUL - goto retry_cursor_lower - ) - echo %GREEN%[信息]%NC% cursor.exe 已成功关闭 -) - -:: 最终确认所有进程都已关闭 -echo %GREEN%[信息]%NC% 正在进行最终确认... -call :check_process "Cursor.exe" -if %ERRORLEVEL% equ 0 ( - echo %RED%[错误]%NC% 仍然检测到 Cursor.exe 进程 - call :get_process_details "Cursor.exe" - pause - exit /b 1 -) -call :check_process "cursor.exe" -if %ERRORLEVEL% equ 0 ( - echo %RED%[错误]%NC% 仍然检测到 cursor.exe 进程 - call :get_process_details "cursor.exe" - pause - exit /b 1 -) - -echo %GREEN%[信息]%NC% 所有 Cursor 进程已确认关闭 - -:: 创建备份目录 -if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%" - -:: 备份现有配置 -if exist "%STORAGE_FILE%" ( - echo %GREEN%[信息]%NC% 正在备份配置文件... - copy "%STORAGE_FILE%" "%BACKUP_DIR%\storage.json.backup_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%" >NUL - if !errorlevel! neq 0 ( - echo %RED%[错误]%NC% 备份失败 - pause - exit /b 1 - ) -) - -:: 生成新的 ID -echo %GREEN%[信息]%NC% 正在生成新的 ID... - -:: 生成随机 ID -for /f "delims=" %%a in ('powershell -Command "[System.Guid]::NewGuid().ToString()"') do set "UUID=%%a" -for /f "delims=" %%a in ('powershell -Command "$bytes = New-Object Byte[] 32; (New-Object Security.Cryptography.RNGCryptoServiceProvider).GetBytes($bytes); -join($bytes | ForEach-Object { $_.ToString('x2') })"') do set "MACHINE_ID=%%a" -for /f "delims=" %%a in ('powershell -Command "$bytes = New-Object Byte[] 32; (New-Object Security.Cryptography.RNGCryptoServiceProvider).GetBytes($bytes); -join($bytes | ForEach-Object { $_.ToString('x2') })"') do set "MAC_MACHINE_ID=%%a" -for /f "delims=" %%a in ('powershell -Command "[System.Guid]::NewGuid().ToString().ToUpper()"') do set "SQM_ID={%%a}" - -:: 创建或更新配置文件 -echo %GREEN%[信息]%NC% 正在更新配置... - -:: 直接更新 JSON 文件 -if not exist "%STORAGE_FILE%" ( - echo {> "%STORAGE_FILE%" - echo "telemetry.machineId": "%MACHINE_ID%",>> "%STORAGE_FILE%" - echo "telemetry.macMachineId": "%MAC_MACHINE_ID%",>> "%STORAGE_FILE%" - echo "telemetry.devDeviceId": "%UUID%",>> "%STORAGE_FILE%" - echo "telemetry.sqmId": "%SQM_ID%">> "%STORAGE_FILE%" - echo }>> "%STORAGE_FILE%" -) else ( - :: 使用 PowerShell 更新现有 JSON 文件 - powershell -Command "$json = Get-Content '%STORAGE_FILE%' | ConvertFrom-Json; $json.'telemetry.machineId' = '%MACHINE_ID%'; $json.'telemetry.macMachineId' = '%MAC_MACHINE_ID%'; $json.'telemetry.devDeviceId' = '%UUID%'; $json.'telemetry.sqmId' = '%SQM_ID%'; $json | ConvertTo-Json -Depth 10 | Set-Content '%STORAGE_FILE%'" -) - -:: 设置文件权限 -icacls "%STORAGE_FILE%" /grant:r "%USERNAME%":F >NUL - -:: 显示结果 -echo. -echo %GREEN%[信息]%NC% 已更新配置: -echo %BLUE%[调试]%NC% machineId: %MACHINE_ID% -echo %BLUE%[调试]%NC% macMachineId: %MAC_MACHINE_ID% -echo %BLUE%[调试]%NC% devDeviceId: %UUID% -echo %BLUE%[调试]%NC% sqmId: %SQM_ID% -echo. -echo %GREEN%[信息]%NC% 操作完成! - -:: 显示公众号信息 -echo. -echo %GREEN%================================%NC% -echo %YELLOW% 关注公众号【煎饼果子AI】一起交流更多Cursor技巧和AI知识 %NC% -echo %GREEN%================================%NC% -echo. - -:: 显示文件树结构 -echo. -echo %GREEN%[信息]%NC% 文件结构: -echo %BLUE%%APPDATA%\Cursor\User%NC% -echo ├── globalStorage -echo │ ├── storage.json (已修改) -echo │ └── backups - -:: 列出备份文件 -if exist "%BACKUP_DIR%\*" ( - for %%F in ("%BACKUP_DIR%\*") do ( - echo │ └── %%~nxF - ) -) else ( - echo │ └── (空) -) -echo. - -echo %GREEN%[信息]%NC% 请重启 Cursor 以应用新的配置 - -echo. - -pause -exit /b 0 diff --git a/scripts/run/cursor_win_id_modifier.ps1 b/scripts/run/cursor_win_id_modifier.ps1 new file mode 100644 index 0000000..1910261 --- /dev/null +++ b/scripts/run/cursor_win_id_modifier.ps1 @@ -0,0 +1,176 @@ +# 设置输出编码为 UTF-8 +$OutputEncoding = [System.Text.Encoding]::UTF8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +# 颜色定义 +$RED = "`e[31m" +$GREEN = "`e[32m" +$YELLOW = "`e[33m" +$BLUE = "`e[34m" +$NC = "`e[0m" + +# 配置文件路径 +$STORAGE_FILE = "$env:APPDATA\Cursor\User\globalStorage\storage.json" +$BACKUP_DIR = "$env:APPDATA\Cursor\User\globalStorage\backups" + +# 检查管理员权限 +function Test-Administrator { + $user = [Security.Principal.WindowsIdentity]::GetCurrent() + $principal = New-Object Security.Principal.WindowsPrincipal($user) + return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) +} + +if (-not (Test-Administrator)) { + Write-Host "$RED[错误]$NC 请以管理员身份运行此脚本" + Write-Host "请右键点击脚本,选择'以管理员身份运行'" + Read-Host "按回车键退出" + exit 1 +} + +# 显示 Logo +Clear-Host +Write-Host @" + + ██████╗██╗ ██╗██████╗ ███████╗ ██████╗ ██████╗ + ██╔════╝██║ ██║██╔══██╗██╔════╝██╔═══██╗██╔══██╗ + ██║ ██║ ██║██████╔╝███████╗██║ ██║██████╔╝ + ██║ ██║ ██║██╔══██╗╚════██║██║ ██║██╔══██╗ + ╚██████╗╚██████╔╝██║ ██║███████║╚██████╔╝██║ ██║ + ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝ + +"@ +Write-Host "$BLUE================================$NC" +Write-Host "$GREEN Cursor ID 修改工具$NC" +Write-Host "$BLUE================================$NC" +Write-Host "" + +# 检查并关闭 Cursor 进程 +Write-Host "$GREEN[信息]$NC 检查 Cursor 进程..." + +function Get-ProcessDetails { + param($processName) + Write-Host "$BLUE[调试]$NC 正在获取 $processName 进程详细信息:" + Get-WmiObject Win32_Process -Filter "name='$processName'" | + Select-Object ProcessId, ExecutablePath, CommandLine | + Format-List +} + +# 定义最大重试次数和等待时间 +$MAX_RETRIES = 5 +$WAIT_TIME = 1 + +# 处理进程关闭 +function Close-CursorProcess { + param($processName) + + $process = Get-Process -Name $processName -ErrorAction SilentlyContinue + if ($process) { + Write-Host "$YELLOW[警告]$NC 发现 $processName 正在运行" + Get-ProcessDetails $processName + + Write-Host "$YELLOW[警告]$NC 尝试关闭 $processName..." + Stop-Process -Name $processName -Force + + $retryCount = 0 + while ($retryCount -lt $MAX_RETRIES) { + $process = Get-Process -Name $processName -ErrorAction SilentlyContinue + if (-not $process) { break } + + $retryCount++ + if ($retryCount -ge $MAX_RETRIES) { + Write-Host "$RED[错误]$NC 在 $MAX_RETRIES 次尝试后仍无法关闭 $processName" + Get-ProcessDetails $processName + Write-Host "$RED[错误]$NC 请手动关闭进程后重试" + Read-Host "按回车键退出" + exit 1 + } + Write-Host "$YELLOW[警告]$NC 等待进程关闭,尝试 $retryCount/$MAX_RETRIES..." + Start-Sleep -Seconds $WAIT_TIME + } + Write-Host "$GREEN[信息]$NC $processName 已成功关闭" + } +} + +# 关闭所有 Cursor 进程 +Close-CursorProcess "Cursor" +Close-CursorProcess "cursor" + +# 创建备份目录 +if (-not (Test-Path $BACKUP_DIR)) { + New-Item -ItemType Directory -Path $BACKUP_DIR | Out-Null +} + +# 备份现有配置 +if (Test-Path $STORAGE_FILE) { + Write-Host "$GREEN[信息]$NC 正在备份配置文件..." + $backupName = "storage.json.backup_$(Get-Date -Format 'yyyyMMdd_HHmmss')" + Copy-Item $STORAGE_FILE "$BACKUP_DIR\$backupName" +} + +# 生成新的 ID +Write-Host "$GREEN[信息]$NC 正在生成新的 ID..." + +$UUID = [System.Guid]::NewGuid().ToString() +$MACHINE_ID = -join ((1..32) | ForEach-Object { '{0:x2}' -f (Get-Random -Max 256) }) +$MAC_MACHINE_ID = -join ((1..32) | ForEach-Object { '{0:x2}' -f (Get-Random -Max 256) }) +$SQM_ID = "{$([System.Guid]::NewGuid().ToString().ToUpper())}" + +# 创建或更新配置文件 +Write-Host "$GREEN[信息]$NC 正在更新配置..." + +$config = @{ + 'telemetry.machineId' = $MACHINE_ID + 'telemetry.macMachineId' = $MAC_MACHINE_ID + 'telemetry.devDeviceId' = $UUID + 'telemetry.sqmId' = $SQM_ID +} + +$config | ConvertTo-Json | Set-Content $STORAGE_FILE + +# 设置文件权限 +$acl = Get-Acl $STORAGE_FILE +$rule = New-Object System.Security.AccessControl.FileSystemAccessRule( + $env:USERNAME, "FullControl", "Allow" +) +$acl.SetAccessRule($rule) +Set-Acl $STORAGE_FILE $acl + +# 显示结果 +Write-Host "" +Write-Host "$GREEN[信息]$NC 已更新配置:" +Write-Host "$BLUE[调试]$NC machineId: $MACHINE_ID" +Write-Host "$BLUE[调试]$NC macMachineId: $MAC_MACHINE_ID" +Write-Host "$BLUE[调试]$NC devDeviceId: $UUID" +Write-Host "$BLUE[调试]$NC sqmId: $SQM_ID" + +# 显示公众号信息 +Write-Host "" +Write-Host "$GREEN================================$NC" +Write-Host "$YELLOW 关注公众号【煎饼果子AI】一起交流更多Cursor技巧和AI知识 $NC" +Write-Host "$GREEN================================$NC" +Write-Host "" + +# 显示文件树结构 +Write-Host "" +Write-Host "$GREEN[信息]$NC 文件结构:" +Write-Host "$BLUE$env:APPDATA\Cursor\User$NC" +Write-Host "├── globalStorage" +Write-Host "│ ├── storage.json (已修改)" +Write-Host "│ └── backups" + +# 列出备份文件 +$backupFiles = Get-ChildItem "$BACKUP_DIR\*" -ErrorAction SilentlyContinue +if ($backupFiles) { + foreach ($file in $backupFiles) { + Write-Host "│ └── $($file.Name)" + } +} else { + Write-Host "│ └── (空)" +} +Write-Host "" + +Write-Host "$GREEN[信息]$NC 请重启 Cursor 以应用新的配置" +Write-Host "" + +Read-Host "按回车键退出" +exit 0 \ No newline at end of file