You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让函数仅在程序首次启动时执行?

问题分析与修复方案

你的代码有几个关键问题导致“仅首次启动执行函数”的功能失效:

  1. 内存变量无法持久化:你用的onn是内存变量,程序重启后会直接重置为0,根本没法记录是否已经启动过。
  2. 变量作用域错误:函数里直接给onn赋值时,Python会把它当成局部变量,而你引用的是未定义的局部变量,运行时会直接报错。
  3. 文件检查逻辑错误:if contents == str是把文件内容和类型做比较,完全不符合逻辑,这个条件永远不会成立。
  4. 每次启动都强制执行函数:你不管是不是首次启动,都会直接调用first_time_open_only(),等于每次启动都会覆盖文件内容。

正确实现思路

要实现“仅首次启动执行函数”,核心是用持久化存储(比如文件)记录状态,而不是依赖内存变量。流程应该是:

  • 启动时先检查标记文件是否存在,或者文件里是否有有效内容
  • 如果不存在/无内容,执行首次启动的函数,并写入标记
  • 如果已经存在,跳过首次函数,直接执行后续验证逻辑

修复后的代码

import _winreg
import os

# 获取MachineGuid
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Cryptography")
result = _winreg.QueryValueEx(key, "MachineGuid")
ID = str(result)
_winreg.CloseKey(key)

licence_path = r'C:\Program Files\Common Files\System\read.txt'

def first_time_open_only():
    # 写入MachineGuid到文件
    with open(licence_path, 'w') as file:
        file.write(ID[2:38])

# 检查文件是否存在,判断是否首次启动
if not os.path.exists(licence_path):
    first_time_open_only()
else:
    # 非首次启动,验证文件内容
    with open(licence_path) as f:
        contents = f.read().strip()
        # 内容无效则关闭程序
        if not contents or contents != ID[2:38]:
            root.destroy()

关键修改点

  • 用os.path.exists()检查文件是否存在,以此判断是否为首次启动
  • 使用with语句自动管理文件,避免手动关闭文件的潜在错误
  • 修正文件内容验证逻辑,直接对比实际的MachineGuid片段
  • 去掉了没用的onn变量,改用文件作为持久化标记

内容的提问来源于stack exchange,提问作者nothing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:25:20