您好,我无法自行卸载应用程序。将 .py 脚本转换为 .exe 后,当我按下按钮时,它应该会从我的计算机中删除/卸载自身。
实际上,我希望在按下 .exe 中的按钮后将其从我的计算机中完全卸载,该怎么做?
这是代码:
from tkinter import *
import os
root = Tk()
root.geometry("300x400")
def func(*args):
os.remove(__file__)
root.destroy()
Button1 = Button(root,text="Delete",fg="green",width=10,height=5)
Button1.pack(side=TOP)
Button1.bind('<Button-1>', func)
root.mainloop()
我希望程序在按下按钮后自行卸载,并且我尝试了上面不起作用的代码(当我将 .py 文件转换为 .exe 文件时,当我按下.exe 文件上的按钮)
编辑:上面的代码适用于 python 文件 .py,但不适用于 .exe 文件!为什么?
最佳答案
经过大量搜索,我找到了使用 this 的解决方案回答!
诀窍是启动一个单独的外部进程,在延迟后删除文件
from tkinter import Tk, Button, TOP
import subprocess
import sys
def func(*args):
root.destroy()
subprocess.Popen(f"cmd /c ping localhost -n 3 > nul & del {sys.executable}")
root = Tk()
root.geometry("300x400")
Button1 = Button(root,text="Delete",fg="green",width=10,height=5)
Button1.pack(side=TOP)
Button1.bind('<Button-1>', func)
root.mainloop()
This答案解释了为什么您应该在 exe 内使用 sys.executable
而不是 __file__
我尝试了这些方法但没有成功
- 使用
atexit
注册文件的删除 - 启动守护线程以在使用
线程
延迟后删除文件 - 启动守护进程以在使用
多处理
延迟后删除文件 - 运行
os.chmod
更改权限 - 以管理员身份运行
使用 pyinstaller --onefile randomtesting.py
进行测试(pip install pyinstaller
)
关于python - 如何从 python 脚本中卸载 .exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74229733/