mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 18:20:43 +00:00
110 lines
3.9 KiB
Python
110 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
||
r"""修:--code / --name 处理完不退出,害得安装程序卡死。
|
||
|
||
现象:
|
||
装完之后配对码没写进去,而且安装程序在 CurStepChanged 里
|
||
用 ewWaitUntilTerminated 等 ykxmz.exe --code ... --silent,
|
||
**永远等不到** —— 因为 --silent 是常驻守护进程,不会返回。
|
||
|
||
根因:
|
||
main() 里 --code 那段处理完之后没有 return,
|
||
继续往下走到 run_silent(),于是变成"启动一个常驻服务"。
|
||
|
||
改法:
|
||
--code / --name 做成**一次性命令**:写完配置、打印、立刻退出。
|
||
想同时启动服务就显式加 --silent(那时才走守护进程)。
|
||
|
||
这样安装程序的分工就干净了:
|
||
CurStepChanged ykxmz.exe --code 123456 <- 秒退,只写配置
|
||
[Run] postinstall ykxmz.exe --silent <- 启动,nowait 不等
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
import ast
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
RUN = (Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\windows"
|
||
r"\run_agent.py"))
|
||
|
||
OLD = ''' if args.code is not None or args.name:
|
||
store = Store(data_dir())
|
||
if args.code is not None:
|
||
digits = "".join(ch for ch in str(args.code) if ch.isdigit())
|
||
if len(digits) != 6:
|
||
print(f"配对码要 6 位数字,收到的是 {args.code!r}")
|
||
return 2
|
||
try:
|
||
store.set_pairing_code(digits)
|
||
except ValueError as exc:
|
||
print(f"设置配对码失败:{exc}")
|
||
return 2
|
||
# 装完就算"设置好了",不要再弹设置窗口
|
||
store.set("setup_done", True)
|
||
store.set("allow_new_pairing", True)
|
||
print(f"配对码已设为 {digits}")
|
||
if args.name:
|
||
store.set("name", str(args.name).strip()[:32])
|
||
print(f"电脑名已设为 {store.get('name')}")
|
||
|
||
if args.autostart:'''
|
||
|
||
NEW = ''' if args.code is not None or args.name:
|
||
store = Store(data_dir())
|
||
wrote = False
|
||
if args.code is not None:
|
||
digits = "".join(ch for ch in str(args.code) if ch.isdigit())
|
||
if len(digits) != 6:
|
||
print(f"配对码要 6 位数字,收到的是 {args.code!r}")
|
||
return 2
|
||
try:
|
||
store.set_pairing_code(digits)
|
||
except ValueError as exc:
|
||
print(f"设置配对码失败:{exc}")
|
||
return 2
|
||
# 装完就算"设置好了",不要再弹设置窗口
|
||
store.set("setup_done", True)
|
||
store.set("allow_new_pairing", True)
|
||
print(f"配对码已设为 {digits}")
|
||
wrote = True
|
||
if args.name:
|
||
store.set("name", str(args.name).strip()[:32])
|
||
print(f"电脑名已设为 {store.get('name')}")
|
||
wrote = True
|
||
|
||
# 只写了配置就结束 —— 这是一次性命令。
|
||
# 不加这个 return 的话会继续走到 run_silent(),
|
||
# 变成常驻进程永不返回,调用方(安装程序)会一直等下去。
|
||
# 想顺便启动服务,显式加 --silent。
|
||
if wrote and not (args.silent or args.add_device is not None
|
||
or args.setup):
|
||
return 0
|
||
|
||
if args.autostart:'''
|
||
|
||
|
||
def main() -> int:
|
||
text = RUN.read_text(encoding="utf-8")
|
||
if "只写了配置就结束" in text:
|
||
print(" 已经改过")
|
||
return 0
|
||
if OLD not in text:
|
||
print(" [失败] 锚点没找到")
|
||
return 1
|
||
|
||
text = text.replace(OLD, NEW, 1)
|
||
RUN.write_text(text, encoding="utf-8", newline="\n")
|
||
print(" --code / --name 改成一次性命令(写完就退出)")
|
||
|
||
try:
|
||
ast.parse(text)
|
||
print(" run_agent.py 语法 OK")
|
||
except SyntaxError as exc:
|
||
print(f" 语法错误: 行 {exc.lineno}: {exc.msg}")
|
||
return 1
|
||
return 0
|
||
|
||
|
||
if __name__ == "__main__":
|
||
sys.exit(main())
|