优化更新: 1. 隐藏命令行窗口弹出 2. 优化打包目录结构按版本号分类 3. 使用subprocess替代os.system
This commit is contained in:
@@ -229,7 +229,17 @@ class AccountSwitcher:
|
|||||||
try:
|
try:
|
||||||
# 1. 先关闭所有Cursor进程
|
# 1. 先关闭所有Cursor进程
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
os.system("taskkill /f /im Cursor.exe >nul 2>&1")
|
# 创建startupinfo对象来隐藏命令行窗口
|
||||||
|
startupinfo = subprocess.STARTUPINFO()
|
||||||
|
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||||
|
startupinfo.wShowWindow = subprocess.SW_HIDE
|
||||||
|
|
||||||
|
# 使用subprocess.run来执行命令,并隐藏窗口
|
||||||
|
subprocess.run(
|
||||||
|
"taskkill /f /im Cursor.exe >nul 2>&1",
|
||||||
|
startupinfo=startupinfo,
|
||||||
|
shell=True
|
||||||
|
)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|
||||||
# 2. 清理注册表(包括更新系统 MachineGuid)
|
# 2. 清理注册表(包括更新系统 MachineGuid)
|
||||||
@@ -284,7 +294,17 @@ class AccountSwitcher:
|
|||||||
try:
|
try:
|
||||||
# 1. 先关闭所有Cursor进程
|
# 1. 先关闭所有Cursor进程
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
os.system("taskkill /f /im Cursor.exe >nul 2>&1")
|
# 创建startupinfo对象来隐藏命令行窗口
|
||||||
|
startupinfo = subprocess.STARTUPINFO()
|
||||||
|
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||||
|
startupinfo.wShowWindow = subprocess.SW_HIDE
|
||||||
|
|
||||||
|
# 关闭Cursor
|
||||||
|
subprocess.run(
|
||||||
|
"taskkill /f /im Cursor.exe >nul 2>&1",
|
||||||
|
startupinfo=startupinfo,
|
||||||
|
shell=True
|
||||||
|
)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|
||||||
# 2. 重置机器码
|
# 2. 重置机器码
|
||||||
@@ -406,9 +426,19 @@ class AccountSwitcher:
|
|||||||
logging.info("正在重启Cursor...")
|
logging.info("正在重启Cursor...")
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
# Windows系统
|
# Windows系统
|
||||||
|
# 创建startupinfo对象来隐藏命令行窗口
|
||||||
|
startupinfo = subprocess.STARTUPINFO()
|
||||||
|
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||||
|
startupinfo.wShowWindow = subprocess.SW_HIDE
|
||||||
|
|
||||||
# 关闭Cursor
|
# 关闭Cursor
|
||||||
os.system("taskkill /f /im Cursor.exe 2>nul")
|
subprocess.run(
|
||||||
|
"taskkill /f /im Cursor.exe 2>nul",
|
||||||
|
startupinfo=startupinfo,
|
||||||
|
shell=True
|
||||||
|
)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|
||||||
# 获取Cursor安装路径
|
# 获取Cursor安装路径
|
||||||
cursor_exe = self.cursor_path / "Cursor.exe"
|
cursor_exe = self.cursor_path / "Cursor.exe"
|
||||||
if cursor_exe.exists():
|
if cursor_exe.exists():
|
||||||
@@ -421,16 +451,16 @@ class AccountSwitcher:
|
|||||||
return False
|
return False
|
||||||
elif sys.platform == "darwin":
|
elif sys.platform == "darwin":
|
||||||
# macOS系统
|
# macOS系统
|
||||||
os.system("killall Cursor 2>/dev/null")
|
subprocess.run("killall Cursor 2>/dev/null", shell=True)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
os.system("open -a Cursor")
|
subprocess.run("open -a Cursor", shell=True)
|
||||||
logging.info("Cursor重启成功")
|
logging.info("Cursor重启成功")
|
||||||
return True
|
return True
|
||||||
elif sys.platform == "linux":
|
elif sys.platform == "linux":
|
||||||
# Linux系统
|
# Linux系统
|
||||||
os.system("pkill -f cursor")
|
subprocess.run("pkill -f cursor", shell=True)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
os.system("cursor &")
|
subprocess.run("cursor &", shell=True)
|
||||||
logging.info("Cursor重启成功")
|
logging.info("Cursor重启成功")
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
@@ -447,12 +477,7 @@ class AccountSwitcher:
|
|||||||
Tuple[bool, str]: (是否成功, 提示消息)
|
Tuple[bool, str]: (是否成功, 提示消息)
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# 1. 先关闭所有Cursor进程
|
# 1. 获取未使用的账号
|
||||||
if sys.platform == "win32":
|
|
||||||
os.system("taskkill /f /im Cursor.exe >nul 2>&1")
|
|
||||||
time.sleep(2)
|
|
||||||
|
|
||||||
# 2. 获取未使用的账号
|
|
||||||
endpoint = "https://cursorapi.nosqli.com/admin/api.account/getUnused"
|
endpoint = "https://cursorapi.nosqli.com/admin/api.account/getUnused"
|
||||||
data = {
|
data = {
|
||||||
"machine_id": self.hardware_id
|
"machine_id": self.hardware_id
|
||||||
@@ -504,11 +529,26 @@ class AccountSwitcher:
|
|||||||
if not all([email, access_token, refresh_token]):
|
if not all([email, access_token, refresh_token]):
|
||||||
return False, "获取账号信息不完整"
|
return False, "获取账号信息不完整"
|
||||||
|
|
||||||
|
# 2. 先关闭Cursor进程
|
||||||
|
if sys.platform == "win32":
|
||||||
|
# 创建startupinfo对象来隐藏命令行窗口
|
||||||
|
startupinfo = subprocess.STARTUPINFO()
|
||||||
|
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||||
|
startupinfo.wShowWindow = subprocess.SW_HIDE
|
||||||
|
|
||||||
|
# 使用subprocess.run来执行命令,并隐藏窗口
|
||||||
|
subprocess.run(
|
||||||
|
"taskkill /f /im Cursor.exe >nul 2>&1",
|
||||||
|
startupinfo=startupinfo,
|
||||||
|
shell=True
|
||||||
|
)
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
# 3. 更新Cursor认证信息
|
# 3. 更新Cursor认证信息
|
||||||
if not self.auth_manager.update_auth(email, access_token, refresh_token):
|
if not self.auth_manager.update_auth(email, access_token, refresh_token):
|
||||||
return False, "更新Cursor认证信息失败"
|
return False, "更新Cursor认证信息失败"
|
||||||
|
|
||||||
# 4. 重置机器码(包含了清理注册表、文件和重启操作)
|
# 4. 重置机器码(使用现有的reset_machine_id方法)
|
||||||
if not self.reset_machine_id():
|
if not self.reset_machine_id():
|
||||||
return False, "重置机器码失败"
|
return False, "重置机器码失败"
|
||||||
|
|
||||||
@@ -546,7 +586,17 @@ class AccountSwitcher:
|
|||||||
try:
|
try:
|
||||||
# 1. 先关闭所有Cursor进程
|
# 1. 先关闭所有Cursor进程
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
os.system("taskkill /f /im Cursor.exe >nul 2>&1")
|
# 创建startupinfo对象来隐藏命令行窗口
|
||||||
|
startupinfo = subprocess.STARTUPINFO()
|
||||||
|
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||||
|
startupinfo.wShowWindow = subprocess.SW_HIDE
|
||||||
|
|
||||||
|
# 关闭Cursor
|
||||||
|
subprocess.run(
|
||||||
|
"taskkill /f /im Cursor.exe >nul 2>&1",
|
||||||
|
startupinfo=startupinfo,
|
||||||
|
shell=True
|
||||||
|
)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|
||||||
# 2. 删除updater目录并创建同名文件以阻止更新
|
# 2. 删除updater目录并创建同名文件以阻止更新
|
||||||
|
|||||||
13
build.bat
13
build.bat
@@ -5,8 +5,19 @@ echo 开始打包流程...
|
|||||||
:: 更新版本号
|
:: 更新版本号
|
||||||
python update_version.py
|
python update_version.py
|
||||||
|
|
||||||
|
:: 读取版本号
|
||||||
|
set /p VERSION=<version.txt
|
||||||
|
echo 当前版本: %VERSION%
|
||||||
|
|
||||||
|
:: 创建版本目录
|
||||||
|
set VERSION_DIR=dist\%VERSION%
|
||||||
|
if not exist "%VERSION_DIR%" mkdir "%VERSION_DIR%"
|
||||||
|
|
||||||
:: 使用新的spec文件进行打包
|
:: 使用新的spec文件进行打包
|
||||||
pyinstaller --noconfirm build_nezha.spec
|
pyinstaller --noconfirm build_nezha.spec
|
||||||
|
|
||||||
echo 打包完成!
|
:: 移动文件到版本目录
|
||||||
|
move "dist\听泉cursor助手%VERSION%.exe" "%VERSION_DIR%\听泉cursor助手v%VERSION%.exe"
|
||||||
|
|
||||||
|
echo 打包完成!文件保存在: %VERSION_DIR%
|
||||||
pause
|
pause
|
||||||
@@ -5,6 +5,7 @@ import time
|
|||||||
import logging
|
import logging
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import subprocess
|
||||||
|
|
||||||
class CursorAuthManager:
|
class CursorAuthManager:
|
||||||
"""Cursor认证信息管理器"""
|
"""Cursor认证信息管理器"""
|
||||||
@@ -99,9 +100,19 @@ class CursorAuthManager:
|
|||||||
logging.info("正在重启Cursor...")
|
logging.info("正在重启Cursor...")
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
# Windows系统
|
# Windows系统
|
||||||
|
# 创建startupinfo对象来隐藏命令行窗口
|
||||||
|
startupinfo = subprocess.STARTUPINFO()
|
||||||
|
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||||
|
startupinfo.wShowWindow = subprocess.SW_HIDE
|
||||||
|
|
||||||
# 关闭Cursor
|
# 关闭Cursor
|
||||||
os.system("taskkill /f /im Cursor.exe 2>nul")
|
subprocess.run(
|
||||||
|
"taskkill /f /im Cursor.exe 2>nul",
|
||||||
|
startupinfo=startupinfo,
|
||||||
|
shell=True
|
||||||
|
)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|
||||||
# 获取Cursor安装路径
|
# 获取Cursor安装路径
|
||||||
cursor_exe = self.cursor_path / "Cursor.exe"
|
cursor_exe = self.cursor_path / "Cursor.exe"
|
||||||
if cursor_exe.exists():
|
if cursor_exe.exists():
|
||||||
@@ -114,16 +125,16 @@ class CursorAuthManager:
|
|||||||
return False
|
return False
|
||||||
elif sys.platform == "darwin":
|
elif sys.platform == "darwin":
|
||||||
# macOS系统
|
# macOS系统
|
||||||
os.system("killall Cursor 2>/dev/null")
|
subprocess.run("killall Cursor 2>/dev/null", shell=True)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
os.system("open -a Cursor")
|
subprocess.run("open -a Cursor", shell=True)
|
||||||
logging.info("Cursor重启成功")
|
logging.info("Cursor重启成功")
|
||||||
return True
|
return True
|
||||||
elif sys.platform == "linux":
|
elif sys.platform == "linux":
|
||||||
# Linux系统
|
# Linux系统
|
||||||
os.system("pkill -f cursor")
|
subprocess.run("pkill -f cursor", shell=True)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
os.system("cursor &")
|
subprocess.run("cursor &", shell=True)
|
||||||
logging.info("Cursor重启成功")
|
logging.info("Cursor重启成功")
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ from PyQt5.QtGui import QIcon, QPixmap
|
|||||||
import time
|
import time
|
||||||
import requests
|
import requests
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
|
import subprocess
|
||||||
|
|
||||||
sys.path.append(str(Path(__file__).parent.parent))
|
sys.path.append(str(Path(__file__).parent.parent))
|
||||||
|
|
||||||
@@ -1340,7 +1341,17 @@ class MainWindow(QMainWindow):
|
|||||||
try:
|
try:
|
||||||
# 1. 先关闭所有Cursor进程
|
# 1. 先关闭所有Cursor进程
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
os.system("taskkill /f /im Cursor.exe >nul 2>&1")
|
# 创建startupinfo对象来隐藏命令行窗口
|
||||||
|
startupinfo = subprocess.STARTUPINFO()
|
||||||
|
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||||
|
startupinfo.wShowWindow = subprocess.SW_HIDE
|
||||||
|
|
||||||
|
# 关闭Cursor
|
||||||
|
subprocess.run(
|
||||||
|
"taskkill /f /im Cursor.exe >nul 2>&1",
|
||||||
|
startupinfo=startupinfo,
|
||||||
|
shell=True
|
||||||
|
)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|
||||||
# 2. 处理updater文件
|
# 2. 处理updater文件
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ set FULL_VERSION=%VERSION%.!TEST_VERSION!
|
|||||||
echo 完整版本号: !FULL_VERSION!
|
echo 完整版本号: !FULL_VERSION!
|
||||||
|
|
||||||
REM 创建测试版本输出目录
|
REM 创建测试版本输出目录
|
||||||
if not exist "dist\test" mkdir "dist\test"
|
set TEST_DIR=dist\test\%VERSION%
|
||||||
|
if not exist "!TEST_DIR!" mkdir "!TEST_DIR!"
|
||||||
|
|
||||||
REM 清理旧文件
|
REM 清理旧文件
|
||||||
if exist "dist\听泉cursor助手%VERSION%.exe" del "dist\听泉cursor助手%VERSION%.exe"
|
if exist "dist\听泉cursor助手%VERSION%.exe" del "dist\听泉cursor助手%VERSION%.exe"
|
||||||
@@ -39,12 +40,12 @@ REM 执行打包
|
|||||||
venv\Scripts\python.exe -m PyInstaller build_nezha.spec --clean
|
venv\Scripts\python.exe -m PyInstaller build_nezha.spec --clean
|
||||||
|
|
||||||
REM 移动并重命名文件
|
REM 移动并重命名文件
|
||||||
move "dist\听泉cursor助手%VERSION%.exe" "dist\test\听泉cursor助手v!FULL_VERSION!.exe"
|
move "dist\听泉cursor助手%VERSION%.exe" "!TEST_DIR!\听泉cursor助手v!FULL_VERSION!.exe"
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo 测试版本构建完成!
|
echo 测试版本构建完成!
|
||||||
echo 版本号: v!FULL_VERSION!
|
echo 版本号: v!FULL_VERSION!
|
||||||
echo 文件位置: dist\test\听泉cursor助手v!FULL_VERSION!.exe
|
echo 文件位置: !TEST_DIR!\听泉cursor助手v!FULL_VERSION!.exe
|
||||||
|
|
||||||
REM 退出虚拟环境
|
REM 退出虚拟环境
|
||||||
deactivate
|
deactivate
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
3.4.2
|
3.4.4
|
||||||
Reference in New Issue
Block a user