学校机房批量网刻系统,在桌面上,有“设置计算机名和IP地址.exe", "配置.ini”,这个是给计算机手动设置IP和计算机名的,当设置完成后,要在极域教室机上执行1.bat 命令,进行自删除。但在极域4.0版本上,则执行不了自删除任务。
下面我用Python,写了一个执行代码,进行自删除。代码:
import os
import subprocess
import sys
import shutil
def delete_files():
# 指定要删除的文件列表
files_to_delete = ["设置计算机名和IP地址.exe", "配置.ini", "1.cmd", "1.bat"]
# 删除指定文件
for file_name in files_to_delete:
try:
os.remove(file_name)
print(f"文件 '{file_name}' 已成功删除。")
except FileNotFoundError:
print(f"文件 '{file_name}' 不存在。")
# 标记自身为删除
try:
# 获取 PyInstaller 临时目录
meipass = sys._MEIPASS
exe_name = os.path.basename(sys.executable)
marker_path = os.path.join(meipass, "delete_marker.txt")
# 创建一个标记文件
with open(marker_path, 'w') as marker_file:
marker_file.write("To be deleted on next run.")
print(f"可执行文件 '{sys.argv[0]}' 已标记为删除,将在下一次运行时删除。")
except FileNotFoundError:
print(f"无法找到可执行文件 '{sys.argv[0]}'。")
if __name__ == "__main__":
delete_files()
# 在下一次运行时,如果存在标记文件,则删除自身
marker_path = os.path.join(sys._MEIPASS, "delete_marker.txt")
if os.path.exists(marker_path):
try:
os.remove(marker_path)
print(f"标记文件 '{marker_path}' 存在,将删除自身。")
except Exception as e:
print(f"删除标记文件时出错: {e}")
# 延时一点时间确保删除标记文件,然后删除自身
subprocess.Popen(["cmd", "/c", "timeout", "/nobreak", "/t", "1", "&&", "del", "/f", "/q", sys.argv[0]], shell=True)
编译:pyinstaller --onfile --noconsole 1.py
pyinstaller --onefile 1.py 带控制台
因为正在运行的文件通常不能直接删除。我建议采用两步走的方法:首先标记文件为删除,然后使用一个辅助的删除器来删除文件。这里我添加了一个标记文件 delete_marker.txt
,标记文件内容表示在下一次运行时要删除。在下一次运行时,如果检测到标记文件存在,就删除标记文件并尝试删除自身。
成功
完美源码 » Python自删除代码“先删除执行文件,在自毁删除”