mirror of
https://github.com/yuaotian/go-cursor-help.git
synced 2025-08-02 22:07:36 +08:00
增强Cursor脚本的环境检查和机器码修改功能,新增对Cursor环境的全面检查,包括Python环境、配置文件、目录结构和权限验证。优化了机器码配置修改流程,增加了备份和验证步骤,确保用户在执行过程中获得详细的反馈和建议,提升了用户体验的可靠性和安全性。
This commit is contained in:
parent
7e3239b2dc
commit
ad51a92595
89
CURSOR_SCRIPT_OPTIMIZATION_SUMMARY.md
Normal file
89
CURSOR_SCRIPT_OPTIMIZATION_SUMMARY.md
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
# Cursor 脚本优化完成总结
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
已成功完成 Cursor 脚本的优化工作,实现了用户选择菜单功能和全面的错误处理增强。
|
||||||
|
|
||||||
|
## 主要改进
|
||||||
|
|
||||||
|
### 1. 用户选择菜单功能 ✅
|
||||||
|
- **选项 1:仅修改机器码**
|
||||||
|
- 仅执行机器码修改功能
|
||||||
|
- 跳过文件夹删除/环境重置步骤
|
||||||
|
- 保留现有 Cursor 配置和数据
|
||||||
|
|
||||||
|
- **选项 2:重置环境+修改机器码**
|
||||||
|
- 执行完全环境重置(删除 Cursor 文件夹)
|
||||||
|
- 包含警告信息:"配置将丢失,请注意备份"
|
||||||
|
- 按照机器代码修改
|
||||||
|
- 相当于原有的完整脚本行为
|
||||||
|
|
||||||
|
### 2. 错误处理增强 ✅
|
||||||
|
|
||||||
|
#### Windows PowerShell 版本增强:
|
||||||
|
- ✅ 添加 `Test-CursorEnvironment` 函数进行环境检查
|
||||||
|
- ✅ 增强的配置文件存在性和格式验证
|
||||||
|
- ✅ 详细的错误提示和解决方案
|
||||||
|
- ✅ 备份操作的成功验证
|
||||||
|
- ✅ 操作进度指示器(1/5 到 5/5)
|
||||||
|
- ✅ 修改结果验证和自动回滚机制
|
||||||
|
- ✅ `Start-CursorToGenerateConfig` 辅助功能
|
||||||
|
|
||||||
|
#### macOS Shell 版本增强:
|
||||||
|
- ✅ 添加 `test_cursor_environment` 函数
|
||||||
|
- ✅ Python3 环境检查(macOS 版本必需)
|
||||||
|
- ✅ 配置文件格式验证
|
||||||
|
- ✅ 目录权限检查
|
||||||
|
- ✅ 操作进度指示器
|
||||||
|
- ✅ 修改结果验证和自动恢复
|
||||||
|
- ✅ `start_cursor_to_generate_config` 辅助功能
|
||||||
|
|
||||||
|
### 3. 用户体验改进 ✅
|
||||||
|
- ✅ 清晰的中文界面和提示信息
|
||||||
|
- ✅ 操作前的二次确认机制
|
||||||
|
- ✅ 详细的操作流程说明
|
||||||
|
- ✅ 友好的成功/失败反馈
|
||||||
|
- ✅ 具体的问题解决建议
|
||||||
|
|
||||||
|
### 4. 兼容性检查 ✅
|
||||||
|
- ✅ Cursor 安装路径验证
|
||||||
|
- ✅ Python3 环境检查(macOS)
|
||||||
|
- ✅ 配置文件目录结构检查
|
||||||
|
- ✅ 权限验证
|
||||||
|
|
||||||
|
## 修改的文件
|
||||||
|
1. `scripts/run/cursor_win_id_modifier.ps1` - Windows PowerShell 版本
|
||||||
|
2. `scripts/run/cursor_mac_id_modifier.sh` - macOS Shell 版本
|
||||||
|
|
||||||
|
## 新增功能函数
|
||||||
|
|
||||||
|
### Windows PowerShell:
|
||||||
|
- `Test-CursorEnvironment` - 环境检查
|
||||||
|
- `Start-CursorToGenerateConfig` - 启动 Cursor 生成配置
|
||||||
|
- 增强的 `Modify-MachineCodeConfig` - 带进度和验证
|
||||||
|
|
||||||
|
### macOS Shell:
|
||||||
|
- `test_cursor_environment` - 环境检查
|
||||||
|
- `start_cursor_to_generate_config` - 启动 Cursor 生成配置
|
||||||
|
- 增强的 `modify_machine_code_config` - 带进度和验证
|
||||||
|
|
||||||
|
## 使用方式
|
||||||
|
1. 运行脚本后会显示选择菜单
|
||||||
|
2. 用户输入 1 或 2 选择执行模式
|
||||||
|
3. 选择选项 2 时会有额外的确认步骤
|
||||||
|
4. 脚本会自动进行环境检查
|
||||||
|
5. 根据选择执行相应的功能流程
|
||||||
|
6. 提供详细的操作反馈和错误处理
|
||||||
|
|
||||||
|
## 测试状态
|
||||||
|
- ✅ PowerShell 脚本语法验证通过
|
||||||
|
- ✅ 函数结构完整性检查通过
|
||||||
|
- ✅ 错误处理逻辑验证通过
|
||||||
|
|
||||||
|
## 安全特性
|
||||||
|
- ✅ 自动备份原始配置
|
||||||
|
- ✅ 备份完整性验证
|
||||||
|
- ✅ 修改失败时自动恢复
|
||||||
|
- ✅ 操作前环境检查
|
||||||
|
- ✅ 详细的操作日志
|
||||||
|
|
||||||
|
这次优化大大提升了脚本的可靠性、用户体验和错误处理能力,使其更适合在各种环境下安全使用。
|
@ -316,37 +316,206 @@ restart_cursor_and_wait() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# 🛠️ 修改机器码配置
|
# 🔍 检查Cursor环境
|
||||||
|
test_cursor_environment() {
|
||||||
|
local mode=${1:-"FULL"}
|
||||||
|
|
||||||
|
echo
|
||||||
|
log_info "🔍 [环境检查] 正在检查Cursor环境..."
|
||||||
|
|
||||||
|
local config_path="$HOME/Library/Application Support/Cursor/User/globalStorage/storage.json"
|
||||||
|
local cursor_app_data="$HOME/Library/Application Support/Cursor"
|
||||||
|
local cursor_app_path="/Applications/Cursor.app"
|
||||||
|
local issues=()
|
||||||
|
|
||||||
|
# 检查Python3环境(macOS版本需要)
|
||||||
|
if ! command -v python3 >/dev/null 2>&1; then
|
||||||
|
issues+=("Python3环境不可用,macOS版本需要Python3来处理JSON配置文件")
|
||||||
|
log_warn "⚠️ [警告] 未找到Python3,请安装Python3: brew install python3"
|
||||||
|
else
|
||||||
|
log_info "✅ [检查] Python3环境可用: $(python3 --version)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查配置文件
|
||||||
|
if [ ! -f "$config_path" ]; then
|
||||||
|
issues+=("配置文件不存在: $config_path")
|
||||||
|
else
|
||||||
|
# 验证JSON格式
|
||||||
|
if python3 -c "import json; json.load(open('$config_path'))" 2>/dev/null; then
|
||||||
|
log_info "✅ [检查] 配置文件格式正确"
|
||||||
|
else
|
||||||
|
issues+=("配置文件格式错误或损坏")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查Cursor目录结构
|
||||||
|
if [ ! -d "$cursor_app_data" ]; then
|
||||||
|
issues+=("Cursor应用数据目录不存在: $cursor_app_data")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查Cursor应用安装
|
||||||
|
if [ ! -d "$cursor_app_path" ]; then
|
||||||
|
issues+=("未找到Cursor应用安装: $cursor_app_path")
|
||||||
|
else
|
||||||
|
log_info "✅ [检查] 找到Cursor应用: $cursor_app_path"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查目录权限
|
||||||
|
if [ -d "$cursor_app_data" ] && [ ! -w "$cursor_app_data" ]; then
|
||||||
|
issues+=("Cursor应用数据目录无写入权限: $cursor_app_data")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 返回检查结果
|
||||||
|
if [ ${#issues[@]} -eq 0 ]; then
|
||||||
|
log_info "✅ [环境检查] 所有检查通过"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_error "❌ [环境检查] 发现 ${#issues[@]} 个问题:"
|
||||||
|
for issue in "${issues[@]}"; do
|
||||||
|
echo -e "${RED} • $issue${NC}"
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 🚀 启动Cursor生成配置文件
|
||||||
|
start_cursor_to_generate_config() {
|
||||||
|
log_info "🚀 [启动] 正在尝试启动Cursor生成配置文件..."
|
||||||
|
|
||||||
|
local cursor_app_path="/Applications/Cursor.app"
|
||||||
|
local cursor_executable="$cursor_app_path/Contents/MacOS/Cursor"
|
||||||
|
|
||||||
|
if [ ! -f "$cursor_executable" ]; then
|
||||||
|
log_error "❌ [错误] 未找到Cursor可执行文件: $cursor_executable"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "📍 [路径] 使用Cursor路径: $cursor_executable"
|
||||||
|
|
||||||
|
# 启动Cursor
|
||||||
|
"$cursor_executable" > /dev/null 2>&1 &
|
||||||
|
local cursor_pid=$!
|
||||||
|
log_info "🚀 [启动] Cursor已启动,PID: $cursor_pid"
|
||||||
|
|
||||||
|
log_info "⏳ [等待] 请等待Cursor完全加载(约30秒)..."
|
||||||
|
log_info "💡 [提示] 您可以在Cursor完全加载后手动关闭它"
|
||||||
|
|
||||||
|
# 等待配置文件生成
|
||||||
|
local config_path="$HOME/Library/Application Support/Cursor/User/globalStorage/storage.json"
|
||||||
|
local max_wait=60
|
||||||
|
local waited=0
|
||||||
|
|
||||||
|
while [ ! -f "$config_path" ] && [ $waited -lt $max_wait ]; do
|
||||||
|
sleep 2
|
||||||
|
waited=$((waited + 2))
|
||||||
|
if [ $((waited % 10)) -eq 0 ]; then
|
||||||
|
log_info "⏳ [等待] 等待配置文件生成... ($waited/$max_wait 秒)"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -f "$config_path" ]; then
|
||||||
|
log_info "✅ [成功] 配置文件已生成!"
|
||||||
|
log_info "💡 [提示] 现在可以关闭Cursor并重新运行脚本"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_warn "⚠️ [超时] 配置文件未在预期时间内生成"
|
||||||
|
log_info "💡 [建议] 请手动操作Cursor(如创建新文件)以触发配置生成"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 🛠️ 修改机器码配置(增强版)
|
||||||
modify_machine_code_config() {
|
modify_machine_code_config() {
|
||||||
|
local mode=${1:-"FULL"}
|
||||||
|
|
||||||
echo
|
echo
|
||||||
log_info "🛠️ [配置] 正在修改机器码配置..."
|
log_info "🛠️ [配置] 正在修改机器码配置..."
|
||||||
|
|
||||||
local config_path="$HOME/Library/Application Support/Cursor/User/globalStorage/storage.json"
|
local config_path="$HOME/Library/Application Support/Cursor/User/globalStorage/storage.json"
|
||||||
|
|
||||||
|
# 增强的配置文件检查
|
||||||
if [ ! -f "$config_path" ]; then
|
if [ ! -f "$config_path" ]; then
|
||||||
log_error "❌ [错误] 配置文件不存在: $config_path"
|
log_error "❌ [错误] 配置文件不存在: $config_path"
|
||||||
log_info "💡 [提示] 请手动启动Cursor一次,然后重新运行此脚本"
|
echo
|
||||||
|
log_info "💡 [解决方案] 请尝试以下步骤:"
|
||||||
|
echo -e "${BLUE} 1️⃣ 手动启动Cursor应用程序${NC}"
|
||||||
|
echo -e "${BLUE} 2️⃣ 等待Cursor完全加载(约30秒)${NC}"
|
||||||
|
echo -e "${BLUE} 3️⃣ 关闭Cursor应用程序${NC}"
|
||||||
|
echo -e "${BLUE} 4️⃣ 重新运行此脚本${NC}"
|
||||||
|
echo
|
||||||
|
log_warn "⚠️ [备选方案] 如果问题持续:"
|
||||||
|
echo -e "${BLUE} • 选择脚本的'重置环境+修改机器码'选项${NC}"
|
||||||
|
echo -e "${BLUE} • 该选项会自动生成配置文件${NC}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# 提供用户选择
|
||||||
|
read -p "是否现在尝试启动Cursor生成配置文件?(y/n): " user_choice
|
||||||
|
if [[ "$user_choice" =~ ^(y|yes)$ ]]; then
|
||||||
|
log_info "🚀 [尝试] 正在尝试启动Cursor..."
|
||||||
|
if start_cursor_to_generate_config; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 验证配置文件格式
|
||||||
|
log_info "🔍 [验证] 检查配置文件格式..."
|
||||||
|
if ! python3 -c "import json; json.load(open('$config_path'))" 2>/dev/null; then
|
||||||
|
log_error "❌ [错误] 配置文件格式错误或损坏"
|
||||||
|
log_info "💡 [建议] 配置文件可能已损坏,建议选择'重置环境+修改机器码'选项"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
log_info "✅ [验证] 配置文件格式正确"
|
||||||
|
|
||||||
|
# 显示操作进度
|
||||||
|
log_info "⏳ [进度] 1/5 - 生成新的设备标识符..."
|
||||||
|
|
||||||
# 生成新的ID
|
# 生成新的ID
|
||||||
local MAC_MACHINE_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
local MAC_MACHINE_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
||||||
local UUID=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
local UUID=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
||||||
local MACHINE_ID="auth0|user_$(openssl rand -hex 32)"
|
local MACHINE_ID="auth0|user_$(openssl rand -hex 32)"
|
||||||
local SQM_ID="{$(uuidgen | tr '[:lower:]' '[:upper:]')}"
|
local SQM_ID="{$(uuidgen | tr '[:lower:]' '[:upper:]')}"
|
||||||
|
|
||||||
log_info "🔧 [生成] 已生成新的设备标识符"
|
log_info "✅ [进度] 1/5 - 设备标识符生成完成"
|
||||||
|
|
||||||
# 备份原始配置
|
log_info "⏳ [进度] 2/5 - 创建备份目录..."
|
||||||
|
|
||||||
|
# 备份原始配置(增强版)
|
||||||
local backup_dir="$HOME/Library/Application Support/Cursor/User/globalStorage/backups"
|
local backup_dir="$HOME/Library/Application Support/Cursor/User/globalStorage/backups"
|
||||||
mkdir -p "$backup_dir"
|
if ! mkdir -p "$backup_dir"; then
|
||||||
|
log_error "❌ [错误] 无法创建备份目录: $backup_dir"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
local backup_name="storage.json.backup_$(date +%Y%m%d_%H%M%S)"
|
local backup_name="storage.json.backup_$(date +%Y%m%d_%H%M%S)"
|
||||||
cp "$config_path" "$backup_dir/$backup_name"
|
local backup_path="$backup_dir/$backup_name"
|
||||||
log_info "💾 [备份] 已备份原配置: $backup_name"
|
|
||||||
|
log_info "⏳ [进度] 3/5 - 备份原始配置..."
|
||||||
|
if ! cp "$config_path" "$backup_path"; then
|
||||||
|
log_error "❌ [错误] 备份配置文件失败"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 验证备份是否成功
|
||||||
|
if [ -f "$backup_path" ]; then
|
||||||
|
local backup_size=$(wc -c < "$backup_path")
|
||||||
|
local original_size=$(wc -c < "$config_path")
|
||||||
|
if [ "$backup_size" -eq "$original_size" ]; then
|
||||||
|
log_info "✅ [进度] 3/5 - 配置备份成功: $backup_name"
|
||||||
|
else
|
||||||
|
log_warn "⚠️ [警告] 备份文件大小不匹配,但继续执行"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_error "❌ [错误] 备份文件创建失败"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "⏳ [进度] 4/5 - 更新配置文件..."
|
||||||
|
|
||||||
# 使用Python修改JSON配置(更可靠)
|
# 使用Python修改JSON配置(更可靠)
|
||||||
python3 -c "
|
local python_result=$(python3 -c "
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -366,18 +535,65 @@ try:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'ERROR: {e}')
|
print(f'ERROR: {e}')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
" 2>/dev/null
|
" 2>&1)
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ] && [[ "$python_result" == "SUCCESS" ]]; then
|
||||||
log_info "✅ [成功] 机器码配置修改完成"
|
log_info "⏳ [进度] 5/5 - 验证修改结果..."
|
||||||
log_info "📋 [详情] 已更新以下标识符:"
|
|
||||||
echo " 🔹 machineId: ${MACHINE_ID:0:20}..."
|
# 验证修改是否成功
|
||||||
echo " 🔹 macMachineId: $MAC_MACHINE_ID"
|
local verification_result=$(python3 -c "
|
||||||
echo " 🔹 devDeviceId: $UUID"
|
import json
|
||||||
echo " 🔹 sqmId: $SQM_ID"
|
try:
|
||||||
return 0
|
with open('$config_path', 'r', encoding='utf-8') as f:
|
||||||
|
config = json.load(f)
|
||||||
|
|
||||||
|
checks = [
|
||||||
|
config.get('telemetry.machineId') == '$MACHINE_ID',
|
||||||
|
config.get('telemetry.macMachineId') == '$MAC_MACHINE_ID',
|
||||||
|
config.get('telemetry.devDeviceId') == '$UUID',
|
||||||
|
config.get('telemetry.sqmId') == '$SQM_ID'
|
||||||
|
]
|
||||||
|
|
||||||
|
if all(checks):
|
||||||
|
print('VERIFICATION_SUCCESS')
|
||||||
|
else:
|
||||||
|
print('VERIFICATION_FAILED')
|
||||||
|
except Exception as e:
|
||||||
|
print(f'VERIFICATION_ERROR: {e}')
|
||||||
|
" 2>&1)
|
||||||
|
|
||||||
|
if [[ "$verification_result" == "VERIFICATION_SUCCESS" ]]; then
|
||||||
|
log_info "✅ [进度] 5/5 - 修改验证成功"
|
||||||
|
echo
|
||||||
|
log_info "🎉 [成功] 机器码配置修改完成!"
|
||||||
|
log_info "📋 [详情] 已更新以下标识符:"
|
||||||
|
echo " 🔹 machineId: ${MACHINE_ID:0:20}..."
|
||||||
|
echo " 🔹 macMachineId: $MAC_MACHINE_ID"
|
||||||
|
echo " 🔹 devDeviceId: $UUID"
|
||||||
|
echo " 🔹 sqmId: $SQM_ID"
|
||||||
|
echo
|
||||||
|
log_info "💾 [备份] 原配置已备份至: $backup_name"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_error "❌ [错误] 修改验证失败: $verification_result"
|
||||||
|
log_info "🔄 [恢复] 正在恢复备份..."
|
||||||
|
cp "$backup_path" "$config_path"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
log_error "❌ [错误] 修改配置失败"
|
log_error "❌ [错误] 修改配置失败: $python_result"
|
||||||
|
log_info "💡 [调试信息] Python执行结果: $python_result"
|
||||||
|
|
||||||
|
# 尝试恢复备份
|
||||||
|
if [ -f "$backup_path" ]; then
|
||||||
|
log_info "🔄 [恢复] 正在恢复备份配置..."
|
||||||
|
if cp "$backup_path" "$config_path"; then
|
||||||
|
log_info "✅ [恢复] 已恢复原始配置"
|
||||||
|
else
|
||||||
|
log_error "❌ [错误] 恢复备份失败"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -1678,11 +1894,30 @@ main() {
|
|||||||
if [ "$execute_mode" = "MODIFY_ONLY" ]; then
|
if [ "$execute_mode" = "MODIFY_ONLY" ]; then
|
||||||
log_info "🚀 [开始] 开始执行仅修改机器码功能..."
|
log_info "🚀 [开始] 开始执行仅修改机器码功能..."
|
||||||
|
|
||||||
# 直接修改机器码配置,不进行文件夹删除和重启
|
# 先进行环境检查
|
||||||
if modify_machine_code_config; then
|
if ! test_cursor_environment "MODIFY_ONLY"; then
|
||||||
|
echo
|
||||||
|
log_error "❌ [环境检查失败] 无法继续执行"
|
||||||
|
echo
|
||||||
|
log_info "💡 [建议] 请选择以下操作:"
|
||||||
|
echo -e "${BLUE} 1️⃣ 选择'重置环境+修改机器码'选项(推荐)${NC}"
|
||||||
|
echo -e "${BLUE} 2️⃣ 手动启动Cursor一次,然后重新运行脚本${NC}"
|
||||||
|
echo -e "${BLUE} 3️⃣ 检查Cursor是否正确安装${NC}"
|
||||||
|
echo -e "${BLUE} 4️⃣ 安装Python3: brew install python3${NC}"
|
||||||
|
echo
|
||||||
|
read -p "按回车键退出..."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 执行机器码修改
|
||||||
|
if modify_machine_code_config "MODIFY_ONLY"; then
|
||||||
|
echo
|
||||||
log_info "🎉 [完成] 机器码修改完成!"
|
log_info "🎉 [完成] 机器码修改完成!"
|
||||||
|
log_info "💡 [提示] 现在可以启动Cursor使用新的机器码配置"
|
||||||
else
|
else
|
||||||
|
echo
|
||||||
log_error "❌ [失败] 机器码修改失败!"
|
log_error "❌ [失败] 机器码修改失败!"
|
||||||
|
log_info "💡 [建议] 请尝试'重置环境+修改机器码'选项"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# 完整的重置环境+修改机器码流程
|
# 完整的重置环境+修改机器码流程
|
||||||
|
@ -209,20 +209,122 @@ function Restart-CursorAndWait {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# 🛠️ 修改机器码配置
|
# <20> 检查配置文件和环境
|
||||||
|
function Test-CursorEnvironment {
|
||||||
|
param(
|
||||||
|
[string]$Mode = "FULL"
|
||||||
|
)
|
||||||
|
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "$BLUE🔍 [环境检查]$NC 正在检查Cursor环境..."
|
||||||
|
|
||||||
|
$configPath = "$env:APPDATA\Cursor\User\globalStorage\storage.json"
|
||||||
|
$cursorAppData = "$env:APPDATA\Cursor"
|
||||||
|
$issues = @()
|
||||||
|
|
||||||
|
# 检查配置文件
|
||||||
|
if (-not (Test-Path $configPath)) {
|
||||||
|
$issues += "配置文件不存在: $configPath"
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
$content = Get-Content $configPath -Raw -Encoding UTF8 -ErrorAction Stop
|
||||||
|
$config = $content | ConvertFrom-Json -ErrorAction Stop
|
||||||
|
Write-Host "$GREEN✅ [检查]$NC 配置文件格式正确"
|
||||||
|
} catch {
|
||||||
|
$issues += "配置文件格式错误: $($_.Exception.Message)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查Cursor目录结构
|
||||||
|
if (-not (Test-Path $cursorAppData)) {
|
||||||
|
$issues += "Cursor应用数据目录不存在: $cursorAppData"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查Cursor安装
|
||||||
|
$cursorPaths = @(
|
||||||
|
"$env:LOCALAPPDATA\Programs\cursor\Cursor.exe",
|
||||||
|
"$env:PROGRAMFILES\Cursor\Cursor.exe",
|
||||||
|
"$env:PROGRAMFILES(X86)\Cursor\Cursor.exe"
|
||||||
|
)
|
||||||
|
|
||||||
|
$cursorFound = $false
|
||||||
|
foreach ($path in $cursorPaths) {
|
||||||
|
if (Test-Path $path) {
|
||||||
|
Write-Host "$GREEN✅ [检查]$NC 找到Cursor安装: $path"
|
||||||
|
$cursorFound = $true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not $cursorFound) {
|
||||||
|
$issues += "未找到Cursor安装,请确认Cursor已正确安装"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 返回检查结果
|
||||||
|
if ($issues.Count -eq 0) {
|
||||||
|
Write-Host "$GREEN✅ [环境检查]$NC 所有检查通过"
|
||||||
|
return @{ Success = $true; Issues = @() }
|
||||||
|
} else {
|
||||||
|
Write-Host "$RED❌ [环境检查]$NC 发现 $($issues.Count) 个问题:"
|
||||||
|
foreach ($issue in $issues) {
|
||||||
|
Write-Host "$RED • $issue$NC"
|
||||||
|
}
|
||||||
|
return @{ Success = $false; Issues = $issues }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# <20>🛠️ 修改机器码配置(增强版)
|
||||||
function Modify-MachineCodeConfig {
|
function Modify-MachineCodeConfig {
|
||||||
|
param(
|
||||||
|
[string]$Mode = "FULL"
|
||||||
|
)
|
||||||
|
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
Write-Host "$GREEN🛠️ [配置]$NC 正在修改机器码配置..."
|
Write-Host "$GREEN🛠️ [配置]$NC 正在修改机器码配置..."
|
||||||
|
|
||||||
$configPath = "$env:APPDATA\Cursor\User\globalStorage\storage.json"
|
$configPath = "$env:APPDATA\Cursor\User\globalStorage\storage.json"
|
||||||
|
|
||||||
|
# 增强的配置文件检查
|
||||||
if (-not (Test-Path $configPath)) {
|
if (-not (Test-Path $configPath)) {
|
||||||
Write-Host "$RED❌ [错误]$NC 配置文件不存在: $configPath"
|
Write-Host "$RED❌ [错误]$NC 配置文件不存在: $configPath"
|
||||||
Write-Host "$YELLOW💡 [提示]$NC 请手动启动Cursor一次,然后重新运行此脚本"
|
Write-Host ""
|
||||||
|
Write-Host "$YELLOW💡 [解决方案]$NC 请尝试以下步骤:"
|
||||||
|
Write-Host "$BLUE 1️⃣ 手动启动Cursor应用程序$NC"
|
||||||
|
Write-Host "$BLUE 2️⃣ 等待Cursor完全加载(约30秒)$NC"
|
||||||
|
Write-Host "$BLUE 3️⃣ 关闭Cursor应用程序$NC"
|
||||||
|
Write-Host "$BLUE 4️⃣ 重新运行此脚本$NC"
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "$YELLOW⚠️ [备选方案]$NC 如果问题持续:"
|
||||||
|
Write-Host "$BLUE • 选择脚本的'重置环境+修改机器码'选项$NC"
|
||||||
|
Write-Host "$BLUE • 该选项会自动生成配置文件$NC"
|
||||||
|
Write-Host ""
|
||||||
|
|
||||||
|
# 提供用户选择
|
||||||
|
$userChoice = Read-Host "是否现在尝试启动Cursor生成配置文件?(y/n)"
|
||||||
|
if ($userChoice -match "^(y|yes)$") {
|
||||||
|
Write-Host "$BLUE🚀 [尝试]$NC 正在尝试启动Cursor..."
|
||||||
|
return Start-CursorToGenerateConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
|
# 验证配置文件格式
|
||||||
|
try {
|
||||||
|
Write-Host "$BLUE🔍 [验证]$NC 检查配置文件格式..."
|
||||||
|
$originalContent = Get-Content $configPath -Raw -Encoding UTF8 -ErrorAction Stop
|
||||||
|
$config = $originalContent | ConvertFrom-Json -ErrorAction Stop
|
||||||
|
Write-Host "$GREEN✅ [验证]$NC 配置文件格式正确"
|
||||||
|
} catch {
|
||||||
|
Write-Host "$RED❌ [错误]$NC 配置文件格式错误: $($_.Exception.Message)"
|
||||||
|
Write-Host "$YELLOW💡 [建议]$NC 配置文件可能已损坏,建议选择'重置环境+修改机器码'选项"
|
||||||
return $false
|
return $false
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
# 显示操作进度
|
||||||
|
Write-Host "$BLUE⏳ [进度]$NC 1/5 - 生成新的设备标识符..."
|
||||||
|
|
||||||
# 生成新的ID
|
# 生成新的ID
|
||||||
$MAC_MACHINE_ID = [System.Guid]::NewGuid().ToString()
|
$MAC_MACHINE_ID = [System.Guid]::NewGuid().ToString()
|
||||||
$UUID = [System.Guid]::NewGuid().ToString()
|
$UUID = [System.Guid]::NewGuid().ToString()
|
||||||
@ -236,21 +338,36 @@ function Modify-MachineCodeConfig {
|
|||||||
$MACHINE_ID = "$prefixHex$randomPart"
|
$MACHINE_ID = "$prefixHex$randomPart"
|
||||||
$SQM_ID = "{$([System.Guid]::NewGuid().ToString().ToUpper())}"
|
$SQM_ID = "{$([System.Guid]::NewGuid().ToString().ToUpper())}"
|
||||||
|
|
||||||
Write-Host "$BLUE🔧 [生成]$NC 已生成新的设备标识符"
|
Write-Host "$GREEN✅ [进度]$NC 1/5 - 设备标识符生成完成"
|
||||||
|
|
||||||
# 读取并修改配置文件
|
Write-Host "$BLUE⏳ [进度]$NC 2/5 - 创建备份目录..."
|
||||||
$originalContent = Get-Content $configPath -Raw -Encoding UTF8
|
|
||||||
$config = $originalContent | ConvertFrom-Json
|
|
||||||
|
|
||||||
# 备份原始值
|
# 备份原始值(增强版)
|
||||||
$backupDir = "$env:APPDATA\Cursor\User\globalStorage\backups"
|
$backupDir = "$env:APPDATA\Cursor\User\globalStorage\backups"
|
||||||
if (-not (Test-Path $backupDir)) {
|
if (-not (Test-Path $backupDir)) {
|
||||||
New-Item -ItemType Directory -Path $backupDir -Force | Out-Null
|
New-Item -ItemType Directory -Path $backupDir -Force -ErrorAction Stop | Out-Null
|
||||||
}
|
}
|
||||||
|
|
||||||
$backupName = "storage.json.backup_$(Get-Date -Format 'yyyyMMdd_HHmmss')"
|
$backupName = "storage.json.backup_$(Get-Date -Format 'yyyyMMdd_HHmmss')"
|
||||||
Copy-Item $configPath "$backupDir\$backupName"
|
$backupPath = "$backupDir\$backupName"
|
||||||
Write-Host "$GREEN💾 [备份]$NC 已备份原配置: $backupName"
|
|
||||||
|
Write-Host "$BLUE⏳ [进度]$NC 3/5 - 备份原始配置..."
|
||||||
|
Copy-Item $configPath $backupPath -ErrorAction Stop
|
||||||
|
|
||||||
|
# 验证备份是否成功
|
||||||
|
if (Test-Path $backupPath) {
|
||||||
|
$backupSize = (Get-Item $backupPath).Length
|
||||||
|
$originalSize = (Get-Item $configPath).Length
|
||||||
|
if ($backupSize -eq $originalSize) {
|
||||||
|
Write-Host "$GREEN✅ [进度]$NC 3/5 - 配置备份成功: $backupName"
|
||||||
|
} else {
|
||||||
|
Write-Host "$YELLOW⚠️ [警告]$NC 备份文件大小不匹配,但继续执行"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw "备份文件创建失败"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "$BLUE⏳ [进度]$NC 4/5 - 更新配置文件..."
|
||||||
|
|
||||||
# 更新配置值
|
# 更新配置值
|
||||||
$config.'telemetry.machineId' = $MACHINE_ID
|
$config.'telemetry.machineId' = $MACHINE_ID
|
||||||
@ -262,17 +379,121 @@ function Modify-MachineCodeConfig {
|
|||||||
$updatedJson = $config | ConvertTo-Json -Depth 10
|
$updatedJson = $config | ConvertTo-Json -Depth 10
|
||||||
[System.IO.File]::WriteAllText($configPath, $updatedJson, [System.Text.Encoding]::UTF8)
|
[System.IO.File]::WriteAllText($configPath, $updatedJson, [System.Text.Encoding]::UTF8)
|
||||||
|
|
||||||
Write-Host "$GREEN✅ [成功]$NC 机器码配置修改完成"
|
Write-Host "$BLUE⏳ [进度]$NC 5/5 - 验证修改结果..."
|
||||||
Write-Host "$BLUE📋 [详情]$NC 已更新以下标识符:"
|
|
||||||
Write-Host " 🔹 machineId: $($MACHINE_ID.Substring(0,20))..."
|
|
||||||
Write-Host " 🔹 macMachineId: $MAC_MACHINE_ID"
|
|
||||||
Write-Host " 🔹 devDeviceId: $UUID"
|
|
||||||
Write-Host " 🔹 sqmId: $SQM_ID"
|
|
||||||
|
|
||||||
return $true
|
# 验证修改是否成功
|
||||||
|
try {
|
||||||
|
$verifyContent = Get-Content $configPath -Raw -Encoding UTF8
|
||||||
|
$verifyConfig = $verifyContent | ConvertFrom-Json
|
||||||
|
|
||||||
|
$verificationPassed = $true
|
||||||
|
if ($verifyConfig.'telemetry.machineId' -ne $MACHINE_ID) { $verificationPassed = $false }
|
||||||
|
if ($verifyConfig.'telemetry.macMachineId' -ne $MAC_MACHINE_ID) { $verificationPassed = $false }
|
||||||
|
if ($verifyConfig.'telemetry.devDeviceId' -ne $UUID) { $verificationPassed = $false }
|
||||||
|
if ($verifyConfig.'telemetry.sqmId' -ne $SQM_ID) { $verificationPassed = $false }
|
||||||
|
|
||||||
|
if ($verificationPassed) {
|
||||||
|
Write-Host "$GREEN✅ [进度]$NC 5/5 - 修改验证成功"
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "$GREEN🎉 [成功]$NC 机器码配置修改完成!"
|
||||||
|
Write-Host "$BLUE📋 [详情]$NC 已更新以下标识符:"
|
||||||
|
Write-Host " 🔹 machineId: $($MACHINE_ID.Substring(0,20))..."
|
||||||
|
Write-Host " 🔹 macMachineId: $MAC_MACHINE_ID"
|
||||||
|
Write-Host " 🔹 devDeviceId: $UUID"
|
||||||
|
Write-Host " 🔹 sqmId: $SQM_ID"
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "$GREEN💾 [备份]$NC 原配置已备份至: $backupName"
|
||||||
|
return $true
|
||||||
|
} else {
|
||||||
|
Write-Host "$RED❌ [错误]$NC 修改验证失败,正在恢复备份..."
|
||||||
|
Copy-Item $backupPath $configPath -Force
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Write-Host "$RED❌ [错误]$NC 验证过程出错: $($_.Exception.Message)"
|
||||||
|
Write-Host "$BLUE🔄 [恢复]$NC 正在恢复备份..."
|
||||||
|
Copy-Item $backupPath $configPath -Force
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
} catch {
|
} catch {
|
||||||
Write-Host "$RED❌ [错误]$NC 修改配置失败: $($_.Exception.Message)"
|
Write-Host "$RED❌ [错误]$NC 修改配置失败: $($_.Exception.Message)"
|
||||||
|
Write-Host "$BLUE💡 [调试信息]$NC 错误类型: $($_.Exception.GetType().FullName)"
|
||||||
|
|
||||||
|
# 尝试恢复备份(如果存在)
|
||||||
|
if ($backupPath -and (Test-Path $backupPath)) {
|
||||||
|
Write-Host "$BLUE🔄 [恢复]$NC 正在恢复备份配置..."
|
||||||
|
try {
|
||||||
|
Copy-Item $backupPath $configPath -Force
|
||||||
|
Write-Host "$GREEN✅ [恢复]$NC 已恢复原始配置"
|
||||||
|
} catch {
|
||||||
|
Write-Host "$RED❌ [错误]$NC 恢复备份失败: $($_.Exception.Message)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 🚀 启动Cursor生成配置文件
|
||||||
|
function Start-CursorToGenerateConfig {
|
||||||
|
Write-Host "$BLUE🚀 [启动]$NC 正在尝试启动Cursor生成配置文件..."
|
||||||
|
|
||||||
|
# 查找Cursor可执行文件
|
||||||
|
$cursorPaths = @(
|
||||||
|
"$env:LOCALAPPDATA\Programs\cursor\Cursor.exe",
|
||||||
|
"$env:PROGRAMFILES\Cursor\Cursor.exe",
|
||||||
|
"$env:PROGRAMFILES(X86)\Cursor\Cursor.exe"
|
||||||
|
)
|
||||||
|
|
||||||
|
$cursorPath = $null
|
||||||
|
foreach ($path in $cursorPaths) {
|
||||||
|
if (Test-Path $path) {
|
||||||
|
$cursorPath = $path
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not $cursorPath) {
|
||||||
|
Write-Host "$RED❌ [错误]$NC 未找到Cursor安装,请确认Cursor已正确安装"
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Write-Host "$BLUE📍 [路径]$NC 使用Cursor路径: $cursorPath"
|
||||||
|
|
||||||
|
# 启动Cursor
|
||||||
|
$process = Start-Process -FilePath $cursorPath -PassThru -WindowStyle Normal
|
||||||
|
Write-Host "$GREEN🚀 [启动]$NC Cursor已启动,PID: $($process.Id)"
|
||||||
|
|
||||||
|
Write-Host "$YELLOW⏳ [等待]$NC 请等待Cursor完全加载(约30秒)..."
|
||||||
|
Write-Host "$BLUE💡 [提示]$NC 您可以在Cursor完全加载后手动关闭它"
|
||||||
|
|
||||||
|
# 等待配置文件生成
|
||||||
|
$configPath = "$env:APPDATA\Cursor\User\globalStorage\storage.json"
|
||||||
|
$maxWait = 60
|
||||||
|
$waited = 0
|
||||||
|
|
||||||
|
while (-not (Test-Path $configPath) -and $waited -lt $maxWait) {
|
||||||
|
Start-Sleep -Seconds 2
|
||||||
|
$waited += 2
|
||||||
|
if ($waited % 10 -eq 0) {
|
||||||
|
Write-Host "$YELLOW⏳ [等待]$NC 等待配置文件生成... ($waited/$maxWait 秒)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Test-Path $configPath) {
|
||||||
|
Write-Host "$GREEN✅ [成功]$NC 配置文件已生成!"
|
||||||
|
Write-Host "$BLUE💡 [提示]$NC 现在可以关闭Cursor并重新运行脚本"
|
||||||
|
return $true
|
||||||
|
} else {
|
||||||
|
Write-Host "$YELLOW⚠️ [超时]$NC 配置文件未在预期时间内生成"
|
||||||
|
Write-Host "$BLUE💡 [建议]$NC 请手动操作Cursor(如创建新文件)以触发配置生成"
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch {
|
||||||
|
Write-Host "$RED❌ [错误]$NC 启动Cursor失败: $($_.Exception.Message)"
|
||||||
return $false
|
return $false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -541,11 +762,33 @@ function Close-CursorProcessAndSaveInfo {
|
|||||||
if ($executeMode -eq "MODIFY_ONLY") {
|
if ($executeMode -eq "MODIFY_ONLY") {
|
||||||
Write-Host "$GREEN🚀 [开始]$NC 开始执行仅修改机器码功能..."
|
Write-Host "$GREEN🚀 [开始]$NC 开始执行仅修改机器码功能..."
|
||||||
|
|
||||||
# 直接修改机器码配置,不进行文件夹删除和重启
|
# 先进行环境检查
|
||||||
if (Modify-MachineCodeConfig) {
|
$envCheck = Test-CursorEnvironment -Mode "MODIFY_ONLY"
|
||||||
|
if (-not $envCheck.Success) {
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "$RED❌ [环境检查失败]$NC 无法继续执行,发现以下问题:"
|
||||||
|
foreach ($issue in $envCheck.Issues) {
|
||||||
|
Write-Host "$RED • $issue$NC"
|
||||||
|
}
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "$YELLOW💡 [建议]$NC 请选择以下操作:"
|
||||||
|
Write-Host "$BLUE 1️⃣ 选择'重置环境+修改机器码'选项(推荐)$NC"
|
||||||
|
Write-Host "$BLUE 2️⃣ 手动启动Cursor一次,然后重新运行脚本$NC"
|
||||||
|
Write-Host "$BLUE 3️⃣ 检查Cursor是否正确安装$NC"
|
||||||
|
Write-Host ""
|
||||||
|
Read-Host "按回车键退出"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# 执行机器码修改
|
||||||
|
if (Modify-MachineCodeConfig -Mode "MODIFY_ONLY") {
|
||||||
|
Write-Host ""
|
||||||
Write-Host "$GREEN🎉 [完成]$NC 机器码修改完成!"
|
Write-Host "$GREEN🎉 [完成]$NC 机器码修改完成!"
|
||||||
|
Write-Host "$BLUE💡 [提示]$NC 现在可以启动Cursor使用新的机器码配置"
|
||||||
} else {
|
} else {
|
||||||
|
Write-Host ""
|
||||||
Write-Host "$RED❌ [失败]$NC 机器码修改失败!"
|
Write-Host "$RED❌ [失败]$NC 机器码修改失败!"
|
||||||
|
Write-Host "$YELLOW💡 [建议]$NC 请尝试'重置环境+修改机器码'选项"
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
# 完整的重置环境+修改机器码流程
|
# 完整的重置环境+修改机器码流程
|
||||||
|
Loading…
x
Reference in New Issue
Block a user