# -*- coding: utf-8 -*- r'''验证卸载卡死的假设:--uninstall 里的自删逻辑和 Inno 卸载器抢目录。 步骤: 1. 彻底清干净 2. 静默安装 3. 单独跑 ykxmz.exe --uninstall,**计时**(不经过 Inno 卸载器) 如果它自己很快返回,说明卡的是 Inno 那一步(抢目录) 4. 看它有没有把安装目录删掉 ''' from __future__ import annotations import subprocess import sys import time from pathlib import Path ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote") SETUP = ROOT / "dist" / "ykxmz-setup-1.7.1.exe" INSTALL_DIR = Path(r"C:\Program Files\ykxmz") CODE = "739251" def ps(command: str, timeout: int = 300) -> tuple: r = subprocess.run( ["powershell", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command", command], capture_output=True, text=True, timeout=timeout, encoding="utf-8", errors="replace") return r.returncode, (r.stdout or "").strip() def main() -> int: print(" 一、彻底清理") ps("Get-Process ykxmz,unins000,_unins.tmp -ErrorAction SilentlyContinue | " "Stop-Process -Force -ErrorAction SilentlyContinue; " "Start-Sleep -Seconds 2; " "Remove-Item 'C:\\Program Files\\ykxmz' -Recurse -Force " "-ErrorAction SilentlyContinue; " "Remove-Item 'C:\\ProgramData\\ykxmz' -Recurse -Force " "-ErrorAction SilentlyContinue; " "Remove-Item 'HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall" "\\{8F3C1D42-7A5E-4B91-9C6D-2E8F4A1B7C30}_is1' -Recurse -Force " "-ErrorAction SilentlyContinue; Write-Output ok") ps("Get-Process ykxmz -ErrorAction SilentlyContinue | " "Stop-Process -Force -ErrorAction SilentlyContinue") time.sleep(3) print(" 二、静默安装") start = time.perf_counter() ps("Start-Process -FilePath '%s' -ArgumentList " "'/VERYSILENT /SUPPRESSMSGBOXES /NORESTART " "/DIR=\"C:\\Program Files\\ykxmz\" /CODE=%s' -Wait" % (SETUP, CODE), timeout=600) print(" 安装耗时 %.1f 秒" % (time.perf_counter() - start)) time.sleep(5) exe = INSTALL_DIR / "ykxmz.exe" print(" ykxmz.exe 在: %s" % exe.is_file()) print() print(" 三、单独跑 --uninstall 并计时(不经过 Inno 卸载器)") print(" 这一步是关键:如果它很快返回,卡的就是 Inno 那边") start = time.perf_counter() try: r = subprocess.run( [str(exe), "--uninstall"], capture_output=True, text=True, timeout=90, encoding="utf-8", errors="replace") elapsed = time.perf_counter() - start print(" ✓ %.1f 秒返回,exit=%s" % (elapsed, r.returncode)) for line in (r.stdout or "").strip().splitlines(): print(" " + line.strip()) except subprocess.TimeoutExpired: print(" ✗ 90 秒没返回 —— **它自己就会卡**") print(" 假设不成立,问题在 --uninstall 本身") print() print(" 四、看安装目录现在什么样") if INSTALL_DIR.is_dir(): files = list(INSTALL_DIR.iterdir()) print(" 目录还在,%d 个条目:" % len(files)) for f in files[:10]: print(" %s" % f.name) else: print(" 目录已被自删逻辑删掉") print() print(" 五、进程状态") rc, out = ps("(Get-Process ykxmz,unins000,_unins.tmp " "-ErrorAction SilentlyContinue | Measure-Object).Count") print(" 残留进程: %s" % (out.strip().splitlines()[-1] if out else "?")) return 0 if __name__ == "__main__": sys.exit(main())