mirror of
https://github.com/yuaotian/go-cursor-help.git
synced 2025-06-08 04:22:06 +08:00
feat: Enhance Cursor ID modifier script with advanced ID generation and version compatibility
- Improved random ID generation with more robust cryptographic methods - Added new functions for generating standard machine and UUID identifiers - Implemented version compatibility check for Cursor versions - Enhanced user guidance with detailed version-specific instructions - Added automatic MachineGuid update and backup functionality - Introduced optional auto-update disabling feature with comprehensive error handling
This commit is contained in:
parent
15ee4454e8
commit
e9bcc02a10
@ -113,18 +113,34 @@ if (Test-Path $STORAGE_FILE) {
|
||||
# 生成新的 ID
|
||||
Write-Host "$GREEN[信息]$NC 正在生成新的 ID..."
|
||||
|
||||
# 生成随机字节数组并转换为十六进制字符串的函数
|
||||
# 在颜色定义后添加此函数
|
||||
function Get-RandomHex {
|
||||
param (
|
||||
[int]$length
|
||||
)
|
||||
$bytes = New-Object byte[] $length
|
||||
|
||||
$bytes = New-Object byte[] ($length)
|
||||
$rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::new()
|
||||
$rng.GetBytes($bytes)
|
||||
$hexString = [System.BitConverter]::ToString($bytes) -replace '-',''
|
||||
$rng.Dispose()
|
||||
return -join ($bytes | ForEach-Object { '{0:x2}' -f $_ })
|
||||
return $hexString
|
||||
}
|
||||
|
||||
# 改进 ID 生成函数
|
||||
function New-StandardMachineId {
|
||||
$template = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"
|
||||
$result = $template -replace '[xy]', {
|
||||
param($match)
|
||||
$r = [Random]::new().Next(16)
|
||||
$v = if ($match.Value -eq "x") { $r } else { ($r -band 0x3) -bor 0x8 }
|
||||
return $v.ToString("x")
|
||||
}
|
||||
return $result
|
||||
}
|
||||
|
||||
# 在生成 ID 时使用新函数
|
||||
$MAC_MACHINE_ID = New-StandardMachineId
|
||||
$UUID = [System.Guid]::NewGuid().ToString()
|
||||
# 将 auth0|user_ 转换为字节数组的十六进制
|
||||
$prefixBytes = [System.Text.Encoding]::UTF8.GetBytes("auth0|user_")
|
||||
@ -132,9 +148,31 @@ $prefixHex = -join ($prefixBytes | ForEach-Object { '{0:x2}' -f $_ })
|
||||
# 生成32字节(64个十六进制字符)的随机数作为 machineId 的随机部分
|
||||
$randomPart = Get-RandomHex -length 32
|
||||
$MACHINE_ID = "$prefixHex$randomPart"
|
||||
$MAC_MACHINE_ID = Get-RandomHex -length 32
|
||||
$SQM_ID = "{$([System.Guid]::NewGuid().ToString().ToUpper())}"
|
||||
|
||||
# 在生成新ID后直接执行注册表操作,移除询问
|
||||
function Update-MachineGuid {
|
||||
try {
|
||||
$newMachineGuid = [System.Guid]::NewGuid().ToString()
|
||||
$registryPath = "HKLM:\SOFTWARE\Microsoft\Cryptography"
|
||||
|
||||
# 备份原始值
|
||||
$originalGuid = (Get-ItemProperty -Path $registryPath -Name "MachineGuid").MachineGuid
|
||||
$backupFile = "$BACKUP_DIR\MachineGuid.backup_$(Get-Date -Format 'yyyyMMdd_HHmmss')"
|
||||
$originalGuid | Out-File $backupFile -Encoding UTF8
|
||||
|
||||
# 更新注册表
|
||||
Set-ItemProperty -Path $registryPath -Name "MachineGuid" -Value $newMachineGuid
|
||||
Write-Host "$GREEN[信息]$NC 已更新系统 MachineGuid: $newMachineGuid"
|
||||
Write-Host "$GREEN[信息]$NC 原始值已备份至: $backupFile"
|
||||
}
|
||||
catch {
|
||||
Write-Host "$RED[错误]$NC 更新系统 MachineGuid 失败: $_"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 创建或更新配置文件
|
||||
Write-Host "$GREEN[信息]$NC 正在更新配置..."
|
||||
|
||||
@ -187,128 +225,51 @@ try {
|
||||
}
|
||||
throw "处理 JSON 失败: $_"
|
||||
}
|
||||
# 直接执行更新 MachineGuid,不再询问
|
||||
Update-MachineGuid
|
||||
# 显示结果
|
||||
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"
|
||||
|
||||
# 尝试设置文件权限
|
||||
try {
|
||||
# 使用当前用户名和域名
|
||||
$currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent()
|
||||
$userAccount = "$($env:USERDOMAIN)\$($env:USERNAME)"
|
||||
# 显示文件树结构
|
||||
Write-Host ""
|
||||
Write-Host "$GREEN[信息]$NC 文件结构:"
|
||||
Write-Host "$BLUE$env:APPDATA\Cursor\User$NC"
|
||||
Write-Host "├── globalStorage"
|
||||
Write-Host "│ ├── storage.json (已修改)"
|
||||
Write-Host "│ └── backups"
|
||||
|
||||
# 创建新的访问控制列表
|
||||
$acl = New-Object System.Security.AccessControl.FileSecurity
|
||||
|
||||
# 添加当前用户的只读权限
|
||||
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
|
||||
$userAccount, # 使用域名\用户名格式
|
||||
[System.Security.AccessControl.FileSystemRights]::ReadAndExecute, # 改为只读权限
|
||||
[System.Security.AccessControl.InheritanceFlags]::None,
|
||||
[System.Security.AccessControl.PropagationFlags]::None,
|
||||
[System.Security.AccessControl.AccessControlType]::Allow
|
||||
)
|
||||
|
||||
try {
|
||||
$acl.AddAccessRule($accessRule)
|
||||
Set-Acl -Path $STORAGE_FILE -AclObject $acl -ErrorAction Stop
|
||||
Write-Host "$GREEN[信息]$NC 成功设置文件只读权限"
|
||||
|
||||
# 设置文件为只读属性
|
||||
Set-ItemProperty -Path $STORAGE_FILE -Name IsReadOnly -Value $true
|
||||
Write-Host "$GREEN[信息]$NC 成功设置文件只读属性"
|
||||
} catch {
|
||||
# 如果第一种方法失败,尝试使用 icacls
|
||||
Write-Host "$YELLOW[警告]$NC 使用备选方法设置权限..."
|
||||
$result = Start-Process "icacls.exe" -ArgumentList "`"$STORAGE_FILE`" /grant `"$($env:USERNAME):(R)`"" -Wait -NoNewWindow -PassThru
|
||||
if ($result.ExitCode -eq 0) {
|
||||
Write-Host "$GREEN[信息]$NC 成功使用 icacls 设置文件只读权限"
|
||||
# 设置文件为只读属性
|
||||
Set-ItemProperty -Path $STORAGE_FILE -Name IsReadOnly -Value $true
|
||||
Write-Host "$GREEN[信息]$NC 成功设置文件只读属性"
|
||||
} else {
|
||||
Write-Host "$YELLOW[警告]$NC 设置文件权限失败,但文件已写入成功"
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
Write-Host "$YELLOW[警告]$NC 设置文件权限失败: $_"
|
||||
Write-Host "$YELLOW[警告]$NC 尝试使用 icacls 命令..."
|
||||
try {
|
||||
$result = Start-Process "icacls.exe" -ArgumentList "`"$STORAGE_FILE`" /grant `"$($env:USERNAME):(R)`"" -Wait -NoNewWindow -PassThru
|
||||
if ($result.ExitCode -eq 0) {
|
||||
Write-Host "$GREEN[信息]$NC 成功使用 icacls 设置文件只读权限"
|
||||
# 设置文件为只读属性
|
||||
Set-ItemProperty -Path $STORAGE_FILE -Name IsReadOnly -Value $true
|
||||
Write-Host "$GREEN[信息]$NC 成功设置文件只读属性"
|
||||
} else {
|
||||
Write-Host "$YELLOW[警告]$NC 所有权限设置方法都失败,但文件已写入成功"
|
||||
}
|
||||
} catch {
|
||||
Write-Host "$YELLOW[警告]$NC icacls 命令失败: $_"
|
||||
}
|
||||
}
|
||||
|
||||
} catch {
|
||||
Write-Host "$RED[错误]$NC 主要操作失败: $_"
|
||||
Write-Host "$YELLOW[尝试]$NC 使用备选方法..."
|
||||
|
||||
try {
|
||||
# 备选方法:使用 Add-Content
|
||||
$tempFile = [System.IO.Path]::GetTempFileName()
|
||||
$config | ConvertTo-Json | Set-Content -Path $tempFile -Encoding UTF8
|
||||
Copy-Item -Path $tempFile -Destination $STORAGE_FILE -Force
|
||||
Remove-Item -Path $tempFile
|
||||
Write-Host "$GREEN[信息]$NC 使用备选方法成功写入配置"
|
||||
} catch {
|
||||
Write-Host "$RED[错误]$NC 所有尝试都失败了"
|
||||
Write-Host "错误详情: $_"
|
||||
Write-Host "目标文件: $STORAGE_FILE"
|
||||
Write-Host "请确保您有足够的权限访问该文件"
|
||||
Read-Host "按回车键退出"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# 显示结果
|
||||
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 "$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) {
|
||||
# 列出备份文件
|
||||
$backupFiles = Get-ChildItem "$BACKUP_DIR\*" -ErrorAction SilentlyContinue
|
||||
if ($backupFiles) {
|
||||
foreach ($file in $backupFiles) {
|
||||
Write-Host "│ └── $($file.Name)"
|
||||
}
|
||||
} else {
|
||||
} else {
|
||||
Write-Host "│ └── (空)"
|
||||
}
|
||||
}
|
||||
|
||||
# 显示公众号信息
|
||||
Write-Host ""
|
||||
Write-Host "$GREEN================================$NC"
|
||||
Write-Host "$YELLOW 关注公众号【煎饼果子卷AI】一起交流更多Cursor技巧和AI知识 $NC"
|
||||
Write-Host "$GREEN================================$NC"
|
||||
Write-Host ""
|
||||
Write-Host "$GREEN[信息]$NC 请重启 Cursor 以应用新的配置"
|
||||
Write-Host ""
|
||||
# 显示公众号信息
|
||||
Write-Host ""
|
||||
Write-Host "$GREEN================================$NC"
|
||||
Write-Host "$YELLOW 关注公众号【煎饼果子卷AI】一起交流更多Cursor技巧和AI知识 $NC"
|
||||
Write-Host "$GREEN================================$NC"
|
||||
Write-Host ""
|
||||
Write-Host "$GREEN[信息]$NC 请重启 Cursor 以应用新的配置"
|
||||
Write-Host ""
|
||||
|
||||
# 询问是否要禁用自动更新
|
||||
Write-Host ""
|
||||
Write-Host "$YELLOW[询问]$NC 是否要禁用 Cursor 自动更新功能?"
|
||||
Write-Host "0) 否 - 保持默认设置 (按回车键)"
|
||||
Write-Host "1) 是 - 禁用自动更新"
|
||||
$choice = Read-Host "请输入选项 (0)"
|
||||
# 询问是否要禁用自动更新
|
||||
Write-Host ""
|
||||
Write-Host "$YELLOW[询问]$NC 是否要禁用 Cursor 自动更新功能?"
|
||||
Write-Host "0) 否 - 保持默认设置 (按回车键)"
|
||||
Write-Host "1) 是 - 禁用自动更新"
|
||||
$choice = Read-Host "请输入选项 (0)"
|
||||
|
||||
if ($choice -eq "1") {
|
||||
if ($choice -eq "1") {
|
||||
Write-Host ""
|
||||
Write-Host "$GREEN[信息]$NC 正在处理自动更新..."
|
||||
$updaterPath = "$env:LOCALAPPDATA\cursor-updater"
|
||||
@ -406,11 +367,130 @@ if ($choice -eq "1") {
|
||||
Write-Host "$RED[错误]$NC 发生未知错误: $_"
|
||||
Show-ManualGuide
|
||||
}
|
||||
}
|
||||
else {
|
||||
}
|
||||
else {
|
||||
Write-Host "$GREEN[信息]$NC 保持默认设置,不进行更改"
|
||||
}
|
||||
|
||||
} catch {
|
||||
Write-Host "$RED[错误]$NC 主要操作失败: $_"
|
||||
Write-Host "$YELLOW[尝试]$NC 使用备选方法..."
|
||||
|
||||
try {
|
||||
# 备选方法:使用 Add-Content
|
||||
$tempFile = [System.IO.Path]::GetTempFileName()
|
||||
$config | ConvertTo-Json | Set-Content -Path $tempFile -Encoding UTF8
|
||||
Copy-Item -Path $tempFile -Destination $STORAGE_FILE -Force
|
||||
Remove-Item -Path $tempFile
|
||||
Write-Host "$GREEN[信息]$NC 使用备选方法成功写入配置"
|
||||
} catch {
|
||||
Write-Host "$RED[错误]$NC 所有尝试都失败了"
|
||||
Write-Host "错误详情: $_"
|
||||
Write-Host "目标文件: $STORAGE_FILE"
|
||||
Write-Host "请确保您有足够的权限访问该文件"
|
||||
Read-Host "按回车键退出"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Read-Host "按回车键退出"
|
||||
exit 0
|
||||
|
||||
# 在文件写入部分修改
|
||||
function Write-ConfigFile {
|
||||
param($config, $filePath)
|
||||
|
||||
try {
|
||||
# 使用 UTF8 无 BOM 编码
|
||||
$utf8NoBom = New-Object System.Text.UTF8Encoding $false
|
||||
$jsonContent = $config | ConvertTo-Json -Depth 10
|
||||
|
||||
# 统一使用 LF 换行符
|
||||
$jsonContent = $jsonContent.Replace("`r`n", "`n")
|
||||
|
||||
[System.IO.File]::WriteAllText(
|
||||
[System.IO.Path]::GetFullPath($filePath),
|
||||
$jsonContent,
|
||||
$utf8NoBom
|
||||
)
|
||||
|
||||
Write-Host "$GREEN[信息]$NC 成功写入配置文件(UTF8 无 BOM)"
|
||||
}
|
||||
catch {
|
||||
throw "写入配置文件失败: $_"
|
||||
}
|
||||
}
|
||||
|
||||
function Get-CursorVersion {
|
||||
try {
|
||||
# 主要检测路径
|
||||
$packagePath = "$env:LOCALAPPDATA\Programs\cursor\resources\app\package.json"
|
||||
|
||||
if (Test-Path $packagePath) {
|
||||
$packageJson = Get-Content $packagePath -Raw | ConvertFrom-Json
|
||||
if ($packageJson.version) {
|
||||
Write-Host "$GREEN[信息]$NC 检测到 Cursor 版本: $($packageJson.version)"
|
||||
return $packageJson.version
|
||||
}
|
||||
}
|
||||
|
||||
# 备用路径检测
|
||||
$altPath = "$env:LOCALAPPDATA\cursor\resources\app\package.json"
|
||||
if (Test-Path $altPath) {
|
||||
$packageJson = Get-Content $altPath -Raw | ConvertFrom-Json
|
||||
if ($packageJson.version) {
|
||||
Write-Host "$GREEN[信息]$NC 检测到 Cursor 版本: $($packageJson.version)"
|
||||
return $packageJson.version
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "$YELLOW[警告]$NC 无法检测到 Cursor 版本"
|
||||
Write-Host "$YELLOW[提示]$NC 请确保 Cursor 已正确安装"
|
||||
return $null
|
||||
}
|
||||
catch {
|
||||
Write-Host "$RED[错误]$NC 获取 Cursor 版本失败: $_"
|
||||
return $null
|
||||
}
|
||||
}
|
||||
|
||||
function Compare-Version {
|
||||
param (
|
||||
[string]$version1,
|
||||
[string]$version2
|
||||
)
|
||||
|
||||
try {
|
||||
$v1 = [version]($version1 -replace '[^\d\.].*$')
|
||||
$v2 = [version]($version2 -replace '[^\d\.].*$')
|
||||
return $v1.CompareTo($v2)
|
||||
}
|
||||
catch {
|
||||
Write-Host "$RED[错误]$NC 版本比较失败: $_"
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
# 在主流程开始时添加版本检查
|
||||
Write-Host "$GREEN[信息]$NC 正在检查 Cursor 版本..."
|
||||
$cursorVersion = Get-CursorVersion
|
||||
|
||||
if ($cursorVersion) {
|
||||
$compareResult = Compare-Version $cursorVersion "0.45.0"
|
||||
if ($compareResult -ge 0) {
|
||||
Write-Host "$RED[错误]$NC 当前版本 ($cursorVersion) 暂不支持"
|
||||
Write-Host "$YELLOW[建议]$NC 请使用 v0.44.11 及以下版本"
|
||||
Write-Host "$YELLOW[建议]$NC 可以从以下地址下载支持的版本:"
|
||||
Write-Host "Windows: https://download.todesktop.com/230313mzl4w4u92/Cursor%20Setup%200.44.11%20-%20Build%20250103fqxdt5u9z-x64.exe"
|
||||
Write-Host "Mac ARM64: https://dl.todesktop.com/230313mzl4w4u92/versions/0.44.11/mac/zip/arm64"
|
||||
Read-Host "按回车键退出"
|
||||
exit 1
|
||||
}
|
||||
else {
|
||||
Write-Host "$GREEN[信息]$NC 当前版本 ($cursorVersion) 支持重置功能"
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host "$YELLOW[警告]$NC 无法检测版本,将继续执行..."
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user