fix(system): 修复开机自启相关功能
This commit is contained in:
@@ -706,7 +706,7 @@ class GeneralSubConfig(LQConfig):
|
|||||||
|
|
||||||
class AppConfig(GlobalConfig):
|
class AppConfig(GlobalConfig):
|
||||||
|
|
||||||
VERSION = "4.4.0.4"
|
VERSION = "4.4.0.5"
|
||||||
|
|
||||||
stage_refreshed = Signal()
|
stage_refreshed = Signal()
|
||||||
PASSWORD_refreshed = Signal()
|
PASSWORD_refreshed = Signal()
|
||||||
@@ -717,7 +717,7 @@ class AppConfig(GlobalConfig):
|
|||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
self.app_path = Path(sys.argv[0]).resolve().parent # 获取软件根目录
|
self.app_path = Path(sys.argv[0]).resolve().parent # 获取软件根目录
|
||||||
self.app_path_sys = str(Path(sys.argv[0]).resolve()) # 获取软件自身的路径
|
self.app_path_sys = Path(sys.argv[0]).resolve() # 获取软件自身的路径
|
||||||
|
|
||||||
self.log_path = self.app_path / "debug/AUTO_MAA.log"
|
self.log_path = self.app_path / "debug/AUTO_MAA.log"
|
||||||
self.database_path = self.app_path / "data/data.db"
|
self.database_path = self.app_path / "data/data.db"
|
||||||
|
|||||||
@@ -31,9 +31,11 @@ import sys
|
|||||||
import ctypes
|
import ctypes
|
||||||
import win32gui
|
import win32gui
|
||||||
import win32process
|
import win32process
|
||||||
import winreg
|
|
||||||
import psutil
|
import psutil
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import tempfile
|
||||||
|
import getpass
|
||||||
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from app.core import Config
|
from app.core import Config
|
||||||
@@ -61,27 +63,82 @@ class _SystemHandler:
|
|||||||
# 恢复系统电源状态
|
# 恢复系统电源状态
|
||||||
ctypes.windll.kernel32.SetThreadExecutionState(self.ES_CONTINUOUS)
|
ctypes.windll.kernel32.SetThreadExecutionState(self.ES_CONTINUOUS)
|
||||||
|
|
||||||
def set_SelfStart(self) -> bool:
|
def set_SelfStart(self) -> None:
|
||||||
"""同步开机自启"""
|
"""同步开机自启"""
|
||||||
|
|
||||||
if Config.get(Config.start_IfSelfStart) and not self.is_startup():
|
if Config.get(Config.start_IfSelfStart) and not self.is_startup():
|
||||||
|
|
||||||
|
# 创建任务计划
|
||||||
try:
|
try:
|
||||||
|
|
||||||
# 创建任务计划
|
# 获取当前用户和时间
|
||||||
|
current_user = getpass.getuser()
|
||||||
|
current_time = datetime.now().strftime("%Y-%m-%dT%H:%M:%S")
|
||||||
|
|
||||||
|
# XML 模板
|
||||||
|
xml_content = f"""<?xml version="1.0" encoding="UTF-16"?>
|
||||||
|
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
|
||||||
|
<RegistrationInfo>
|
||||||
|
<Date>{current_time}</Date>
|
||||||
|
<Author>{current_user}</Author>
|
||||||
|
<Description>AUTO_MAA自启动服务</Description>
|
||||||
|
<URI>\\AUTO_MAA_AutoStart</URI>
|
||||||
|
</RegistrationInfo>
|
||||||
|
<Triggers>
|
||||||
|
<LogonTrigger>
|
||||||
|
<StartBoundary>{current_time}</StartBoundary>
|
||||||
|
<Enabled>true</Enabled>
|
||||||
|
</LogonTrigger>
|
||||||
|
</Triggers>
|
||||||
|
<Principals>
|
||||||
|
<Principal id="Author">
|
||||||
|
<LogonType>InteractiveToken</LogonType>
|
||||||
|
<RunLevel>HighestAvailable</RunLevel>
|
||||||
|
</Principal>
|
||||||
|
</Principals>
|
||||||
|
<Settings>
|
||||||
|
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
|
||||||
|
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
|
||||||
|
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
|
||||||
|
<AllowHardTerminate>false</AllowHardTerminate>
|
||||||
|
<StartWhenAvailable>true</StartWhenAvailable>
|
||||||
|
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
|
||||||
|
<IdleSettings>
|
||||||
|
<StopOnIdleEnd>false</StopOnIdleEnd>
|
||||||
|
<RestartOnIdle>false</RestartOnIdle>
|
||||||
|
</IdleSettings>
|
||||||
|
<AllowStartOnDemand>true</AllowStartOnDemand>
|
||||||
|
<Enabled>true</Enabled>
|
||||||
|
<Hidden>false</Hidden>
|
||||||
|
<RunOnlyIfIdle>false</RunOnlyIfIdle>
|
||||||
|
<WakeToRun>false</WakeToRun>
|
||||||
|
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
|
||||||
|
<Priority>7</Priority>
|
||||||
|
</Settings>
|
||||||
|
<Actions Context="Author">
|
||||||
|
<Exec>
|
||||||
|
<Command>"{Config.app_path_sys}"</Command>
|
||||||
|
</Exec>
|
||||||
|
</Actions>
|
||||||
|
</Task>"""
|
||||||
|
|
||||||
|
# 创建临时 XML 文件并执行
|
||||||
|
with tempfile.NamedTemporaryFile(
|
||||||
|
mode="w", suffix=".xml", delete=False, encoding="utf-16"
|
||||||
|
) as f:
|
||||||
|
f.write(xml_content)
|
||||||
|
xml_file = f.name
|
||||||
|
|
||||||
|
try:
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
[
|
[
|
||||||
"schtasks",
|
"schtasks",
|
||||||
"/create",
|
"/create",
|
||||||
"/tn",
|
"/tn",
|
||||||
"AUTO_MAA_AutoStart",
|
"AUTO_MAA_AutoStart",
|
||||||
"/tr",
|
"/xml",
|
||||||
Config.app_path_sys,
|
xml_file,
|
||||||
"/sc",
|
"/f",
|
||||||
"onlogon",
|
|
||||||
"/rl",
|
|
||||||
"highest", # 以最高权限运行
|
|
||||||
"/f", # 强制创建(覆盖现有任务)
|
|
||||||
],
|
],
|
||||||
creationflags=subprocess.CREATE_NO_WINDOW,
|
creationflags=subprocess.CREATE_NO_WINDOW,
|
||||||
stdin=subprocess.DEVNULL,
|
stdin=subprocess.DEVNULL,
|
||||||
@@ -91,14 +148,18 @@ class _SystemHandler:
|
|||||||
|
|
||||||
if result.returncode == 0:
|
if result.returncode == 0:
|
||||||
logger.info(f"任务计划程序自启动已创建: {Config.app_path_sys}")
|
logger.info(f"任务计划程序自启动已创建: {Config.app_path_sys}")
|
||||||
return True
|
|
||||||
else:
|
else:
|
||||||
logger.error(f"创建任务计划失败: {result.stderr}")
|
logger.error(f"创建任务计划失败: {result.stderr}")
|
||||||
return False
|
|
||||||
|
finally:
|
||||||
|
# 删除临时文件
|
||||||
|
try:
|
||||||
|
Path(xml_file).unlink()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"设置任务计划程序自启动失败: {e}")
|
logger.exception(f"设置任务计划程序自启动失败: {e}")
|
||||||
return False
|
|
||||||
|
|
||||||
elif not Config.get(Config.start_IfSelfStart) and self.is_startup():
|
elif not Config.get(Config.start_IfSelfStart) and self.is_startup():
|
||||||
|
|
||||||
@@ -114,14 +175,11 @@ class _SystemHandler:
|
|||||||
|
|
||||||
if result.returncode == 0:
|
if result.returncode == 0:
|
||||||
logger.info("任务计划程序自启动已删除")
|
logger.info("任务计划程序自启动已删除")
|
||||||
return True
|
|
||||||
else:
|
else:
|
||||||
logger.error(f"删除任务计划失败: {result.stderr}")
|
logger.error(f"删除任务计划失败: {result.stderr}")
|
||||||
return False
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"删除任务计划程序自启动失败: {e}")
|
logger.exception(f"删除任务计划程序自启动失败: {e}")
|
||||||
return False
|
|
||||||
|
|
||||||
def set_power(self, mode) -> None:
|
def set_power(self, mode) -> None:
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
{
|
{
|
||||||
"main_version": "4.4.0.4",
|
"main_version": "4.4.0.5",
|
||||||
"version_info": {
|
"version_info": {
|
||||||
|
"4.4.0.5": {
|
||||||
|
"修复BUG": [
|
||||||
|
"修复开机自启相关功能"
|
||||||
|
]
|
||||||
|
},
|
||||||
"4.4.0.4": {
|
"4.4.0.4": {
|
||||||
"新增功能": [
|
"新增功能": [
|
||||||
"添加重置管理密钥功能"
|
"添加重置管理密钥功能"
|
||||||
|
|||||||
Reference in New Issue
Block a user