网站首页 > 基础教程 正文
引言:
封装的类主要实现了、终止指定进程 (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
需要注意的地方:
- 权限问题:在进行卸载操作时,确保程序的执行者具备管理员权限,否则会导致卸载失败。
- 平台兼容性:当前代码假设操作系统为 Windows,如果在其他平台上运行,需要调整特定的 Windows API 调用(如管理员权限检查、安装路径、卸载命令等)。
- 静默安装/卸载参数:确保 EXE 程序本身支持 /S 静默模式(许多安装程序支持此参数,但不是所有程序都支持)。如果安装或卸载程序不支持静默模式,用户将看到安装或卸载界面,可能会影响自动化流程。
猜你喜欢
- 2025-03-20 Python+Deepseek实战:零基础也能批量生成项目,轻松获高薪offer
- 2025-03-20 Deepseek神回答:说给小白的Python之禅The Zen of Python
- 2025-03-20 程序员读论文的真相:看半小时就犯困?5个野路子让你变学术卷王
- 2025-03-20 概率分布,贝叶斯神经网络python开发程序包pyro教程和使用指南
- 2025-03-20 Python高效管理JSON文件:读写、更新、删除全攻略
- 2025-03-20 如何用python解决日常自动化工作任务
- 2025-03-20 ROS2 机械臂 MoveIt 开发必看!用 MTC 实现抓取任务规划(附解析)
- 2025-03-20 Python 项目代码写完了,然后怎么打包和发布?
- 2025-03-20 [oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana加法
- 2025-03-20 如何定期执行 Python 脚本:5 种常见方法
- 05-14CSS基础知识(一) CSS入门
- 05-14CSS是什么? CSS和HTML有什么关系?
- 05-14什么是CSS3?
- 05-14CSS如何画一个三角形?
- 05-14初识CSS——CSS三角制作
- 05-14Wordpress建站教程:给图片添加CSS样式
- 05-14HTML和HTML5,css和css3的区别有哪些?
- 05-14Html中Css样式Ⅱ
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- mysql教程 (60)
- pythonif (86)
- location.href (69)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)