欢迎大家来到IT世界,在知识的湖畔探索吧!
引言:
封装的类主要实现了、终止指定进程 (win_process)、安装 EXE 程序 (install_exe)、卸载 EXE 程序 (uninstall_exe)
终止指定进程:遍历所有正在运行的进程,并根据配置文件中的 exe_process_name 找到并终止相关进程。
安装 EXE 程序:获取EXE 程序路径和目标安装路径,构造并执行静默安装命令(即不需要用户交互的安装),通过 subprocess.run() 执行命令,并输出安装结果。
卸载 EXE 程序:通过配置文件获取安装路径,然后调用卸载程序(通常是 uninstall.exe)来静默卸载程序。如果当前用户没有管理员权限,则抛出异常提示权限不足。
import ctypes import os import psutil import subprocess from Public_Config.PublicConfig import ConfigYaml class ExE: def win_process(self): """杀掉所有指定进程""" #todo 遍历所有正在运行的进程 for process in psutil.process_iter(): try: #todo 获取进程的PID和名称 processinfo = process.as_dict(attrs=['pid', 'name']) #todo 如果进程名称匹配配置文件中定义的exe进程名,则杀掉该进程 if processinfo['name'] == ConfigYaml().get_exe_process_name(): print(f"Killing process: {processinfo['name']} with PID: {processinfo['pid']}") process.kill() except psutil.NoSuchProcess: #todo 捕获进程不存在的异常,忽略并继续处理 pass def install_exe(self): """安装exe程序到指定目录""" #todo 从配置文件获取exe程序路径和目标安装路径 exe_path = ConfigYaml().get_exe_path() install_path = ConfigYaml().get_exe_install_path() #todo 构造命令行以静默安装exe程序 cmd = f'"{exe_path}" /S /D="{install_path}"' #todo /S:静默安装,/D:指定安装目录 print(f"Running installation command: {cmd}") #todo 使用subprocess运行安装命令,捕获输出和错误信息 result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) #todo 检查安装命令的返回码,0表示成功 if result.returncode == 0: print("Exe has been installed successfully.") else: #todo 输出错误信息,捕获并解码为cp936编码(针对中文环境) print("Error during installation:", result.stderr.decode("cp936")) def uninstall_exe(self): """根据exe程序自带的uninstall.exe卸载程序""" if os.name == 'nt': #todo 仅在Windows平台下进行操作 #todo 判断当前用户是否具有管理员权限 if ctypes.windll.shell32.IsUserAnAdmin() != 1: raise Exception('Insufficient privileges, unable to uninstall the program!') #todo 获取安装路径并执行卸载命令 uninstall_cmd = f'"{ConfigYaml().get_exe_install_path()}/uninstall.exe" /S' #todo /S:静默卸载 print(f"Running uninstallation command: {uninstall_cmd}") #todo 使用subprocess运行卸载命令,捕获输出和错误信息 result = subprocess.run(uninstall_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) #todo 检查卸载命令的返回码,0表示成功 if result.returncode == 0: print("Exe has been uninstalled successfully.") else: #todo 输出错误信息,捕获并解码为cp936编码(针对中文环境) print("Error during uninstallation:", result.stderr.decode("cp936")) if __name__ == '__main__': #todo 在这里通常会调用ExE类的方法,例如: #todo exe = ExE() #todo exe.install_exe() #todo exe.uninstall_exe() pass
欢迎大家来到IT世界,在知识的湖畔探索吧!
需要注意的地方:
- 权限问题:在进行卸载操作时,确保程序的执行者具备管理员权限,否则会导致卸载失败。
- 平台兼容性:当前代码假设操作系统为 Windows,如果在其他平台上运行,需要调整特定的 Windows API 调用(如管理员权限检查、安装路径、卸载命令等)。
- 静默安装/卸载参数:确保 EXE 程序本身支持 /S 静默模式(许多安装程序支持此参数,但不是所有程序都支持)。如果安装或卸载程序不支持静默模式,用户将看到安装或卸载界面,可能会影响自动化流程。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/101971.html