一、根据txt文件进行限制
读取并检查打开次数是否超过最大值。如果超过,则程序终止并给出提示;否则增加打开次数并保存到文件。
缺点就是如果用户删除了txt文件或者更改会导致限制出错。
import os
# 设置最大允许打开次数
MAX_OPEN_COUNT = 5
# 计数文件的路径
COUNTER_FILE_PATH = 'open_counter.txt'
def read_open_count():
# 如果计数文件存在,则读取打开次数;否则返回0
if os.path.exists(COUNTER_FILE_PATH):
with open(COUNTER_FILE_PATH, 'r') as file:
count = file.read()
return int(count) if count.isdigit() else 0
return 0
def write_open_count(count):
# 写入新的打开次数到计数文件
with open(COUNTER_FILE_PATH, 'w') as file:
file.write(str(count))
def main():
# 读取当前的打开次数
open_count = read_open_count()
if open_count >= MAX_OPEN_COUNT:
print("程序已达到最大打开次数,无法再打开。")
return
# 增加打开次数并保存
open_count += 1
write_open_count(open_count)
# 继续执行程序的其他逻辑
print(f"这是第 {open_count} 次打开程序。")
if __name__ == '__main__':
main()
二、根据环境变量
在一些简单的应用程序中,可以使用环境变量来记录打开次数。不过,这种方法不太持久,重启系统后会丢失。
import os
# 设置最大允许打开次数
MAX_OPEN_COUNT = 5
ENV_VARIABLE = 'APP_OPEN_COUNT'
def get_open_count():
return int(os.getenv(ENV_VARIABLE, 0))
def set_open_count(count):
os.environ[ENV_VARIABLE] = str(count)
def main():
open_count = get_open_count()
if open_count >= MAX_OPEN_COUNT:
print("程序已达到最大打开次数,无法再打开。")
return
open_count += 1
set_open_count(open_count)
print(f"这是第 {open_count} 次打开程序。")
if __name__ == '__main__':
main()
三、使用系统注册表(Windows)
只在Windows上运行,可以使用Windows注册表来保存打开次数。
import winreg as reg
# 设置最大允许打开次数
MAX_OPEN_COUNT = 5
REGISTRY_KEY = r'SOFTWARE\MyApp'
VALUE_NAME = 'OpenCount'
def get_open_count():
try:
key = reg.OpenKey(reg.HKEY_CURRENT_USER, REGISTRY_KEY)
count, _ = reg.QueryValueEx(key, VALUE_NAME)
reg.CloseKey(key)
return count
except FileNotFoundError:
return 0
def set_open_count(count):
key = reg.CreateKey(reg.HKEY_CURRENT_USER, REGISTRY_KEY)
reg.SetValueEx(key, VALUE_NAME, 0, reg.REG_DWORD, count)
reg.CloseKey(key)
def main():
open_count = get_open_count()
if open_count >= MAX_OPEN_COUNT:
print("程序已达到最大打开次数,无法再打开。")
return
open_count += 1
set_open_count(open_count)
print(f"这是第 {open_count} 次打开程序。")
if __name__ == '__main__':
main()
四、使用数据库
可以使用SQLite或其他数据库来记录打开次数。这种方法适合需要存储更多信息或管理多个用户的情况。
import sqlite3
# 设置最大允许打开次数
MAX_OPEN_COUNT = 5
DATABASE_PATH = 'app_usage.db'
def create_database():
conn = sqlite3.connect(DATABASE_PATH)
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS usage (
id INTEGER PRIMARY KEY,
count INTEGER DEFAULT 0
)
''')
conn.commit()
conn.close()
def get_open_count():
conn = sqlite3.connect(DATABASE_PATH)
cursor = conn.cursor()
cursor.execute('SELECT count FROM usage WHERE id = 1')
row = cursor.fetchone()
count = row[0] if row else 0
conn.close()
return count
def update_open_count(count):
conn = sqlite3.connect(DATABASE_PATH)
cursor = conn.cursor()
cursor.execute('INSERT OR REPLACE INTO usage (id, count) VALUES (1, ?)', (count,))
conn.commit()
conn.close()
def main():
create_database()
open_count = get_open_count()
if open_count >= MAX_OPEN_COUNT:
print("程序已达到最大打开次数,无法再打开。")
return
open_count += 1
update_open_count(open_count)
print(f"这是第 {open_count} 次打开程序。")
if __name__ == '__main__':
main()
五、通过验证互联网上的文件
(如 https://你的网址/lic.txt
)来控制程序的访问
import requests
# 设置许可证文件的URL
LICENSE_URL = 'https://你的网址/lic.txt'
def check_license():
try:
response = requests.get(LICENSE_URL, timeout=5) # 设置超时时间为5秒
if response.status_code == 200:
return True # 文件可访问
else:
return False # 文件不可访问
except requests.RequestException:
return False # 网络请求异常
def main():
if check_license():
print("许可证有效,可以使用程序。")
# 在这里添加程序的主逻辑
else:
print("无法访问许可证文件,程序无法使用。")
if __name__ == '__main__':
main()