如何修改Tkinter脚本实现Chrome自动下载安装及自动化操作?
软件安装自动化脚本优化方案
需求说明
我用Tkinter编写了一款软件安装自动化脚本,目标是让各功能仅需极少手动操作即可自动化执行。例如当前的install_chrome函数仅能打开Chrome下载链接,我希望点击Tkinter中的“RUN”按钮后,可直接打开Chrome下载页面并自动开始下载ChromeSetup.exe并启动安装,同时其他功能也需实现类似流程。请问需要对现有脚本做出哪些调整修改?
现有脚本
from tkinter import * import tkinter as tk import webbrowser import subprocess import time import sys import os master = Tk() master.geometry("250x350") master.title("Software Installation") #======================================函数定义================================== def install_chrome(): chrome_download_link = "https://www.google.com/chrome/dr/download/?brand=AYYF&geo=US&gclid=EAIaIQobChMI8MO67O-0gQMVfButBh0spwPFEAAYASAAEgLZi_D_BwE&gclsrc=aw.ds" webbrowser.open(chrome_download_link) def install_office_2019(): office_2019_download_link = "https://www.microsoft.com//en-us//microsoft-365//store//download-office-2019//" webbrowser.open(office_2019_download_link) def run_windows_updates(): subprocess.call('cmd /c start ms-settings:windowsupdate', shell=True) def uninstall_office_365(): subprocess.call('appwiz.cpl', shell=True) def disable_network_sharing(share_name): command = f"net share {share_name} /delete" subprocess.Popen(command, shell=True) disable_network_sharing("SharedFolder") def install_egnyte(): chrome_download_link = "https://helpdesk.egnyte.com/hc/en-us/articles/204909984-Desktop-App-for-Windows-Installation" webbrowser.open(chrome_download_link) def install_sophos(): chrome_download_link = "https://login.sophos.com/login.sophos.com/oauth2/v2.0/authorize?p=B2C_1A_signup_signin&client_id=d8ce821f-a1da-4b03-b7e2-1d1a9cc028f3&redirect_uri=https%3A%2F%2Fcloud.sophos.com%2Fmanage%2Flogin%2Fazureb2c&scope=openid&response_type=id_token&prompt=login&state=" webbrowser.open(chrome_download_link) def install_adobe(): chrome_download_link = "https://www.adobe.com/downloads.html" webbrowser.open(chrome_download_link) #=============================UI组件======================================================= var1 = IntVar() Checkbutton(master, text="Delete office Programs", variable=var1).grid(row=0, sticky=W) btn2 = Button(master, text = 'RUN',command=uninstall_office_365) btn2.grid(row=0, column=1) var2 = IntVar() Checkbutton(master, text="Run Updates", variable=var2).grid(row=1, sticky=W) btn2 = Button(master, text = 'RUN',command=run_windows_updates) btn2.grid(row=1, column=1) var3 = IntVar() Checkbutton(master, text="Install Chrome", variable=var3).grid(row=2, sticky=W) btn2 = Button(master, text = 'RUN',command=install_chrome) btn2.grid(row=2, column=1) var4 = IntVar() Checkbutton(master, text="Install Office 19", variable=var4).grid(row=3, sticky=W) btn2 = Button(master, text = 'RUN',command=install_office_2019) btn2.grid(row=3, column=1) var5 = IntVar() Checkbutton(master, text="Install Sophos", variable=var5).grid(row=4, sticky=W) btn2 = Button(master, text = 'RUN',command=install_sophos) btn2.grid(row=4, column=1) var6 = IntVar() Checkbutton(master, text="Install Egnyte", variable=var6).grid(row=5, sticky=W) btn2 = Button(master, text = 'RUN',command=install_egnyte) btn2.grid(row=5, column=1) var7 = IntVar() Checkbutton(master, text="Turn off Network Sharing", variable=var7).grid(row=6, sticky=W) btn2 = Button(master, text = 'RUN',command=disable_network_sharing) btn2.grid(row=6, column=1) var8 = IntVar() Checkbutton(master, text="Install Adobe Reader ", variable=var8).grid(row=7, sticky=W) btn2 = Button(master, text = 'RUN',command=install_adobe) btn2.grid(row=7, column=1) if __name__=='__main__': master.mainloop()
修改调整建议
1. 核心功能改造:从网页跳转转为自动下载+静默安装
现有脚本仅打开下载页面,需手动操作,要实现全自动需替换为直接下载官方安装包+静默执行安装:
Chrome示例改造
使用官方静默安装包直链,配合requests下载、subprocess静默安装:
# 先安装依赖:pip install requests import requests def install_chrome(): # 64位Chrome企业版静默安装包直链 chrome_installer_url = "https://dl.google.com/tag/s/dl/chrome/install/googlechromestandaloneenterprise64.msi" # 临时目录保存安装包 download_path = os.path.join(os.getenv("TEMP"), "ChromeSetup.msi") # 下载安装包 with requests.get(chrome_installer_url, stream=True) as r: r.raise_for_status() with open(download_path, "wb") as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) # 静默安装(/qn参数表示无交互) subprocess.call(f'msiexec /i "{download_path}" /qn', shell=True) # 安装完成后删除临时文件 os.remove(download_path)
其他软件适配思路
- Office 2019:使用微软Office部署工具(ODT),通过配置XML文件指定安装版本,调用
setup.exe /configure config.xml实现静默下载安装。 - Adobe Reader:获取官方离线安装包直链,安装时添加
/sAll参数实现无交互安装。 - Sophos/Egnyte:查找官方提供的静默安装包或命令行安装参数,避免跳转网页。
2. 修复现有BUG
disable_network_sharing函数存在递归死循环,修改为:
def disable_network_sharing(): share_name = "SharedFolder" # /y参数自动确认删除,无需手动确认 command = f"net share {share_name} /delete /y" subprocess.Popen(command, shell=True)
同时按钮绑定命令时无需传参,对应UI部分的按钮绑定保持command=disable_network_sharing即可。
3. 优化UI交互逻辑
- 新增批量执行功能:添加一个总按钮,检查所有勾选的任务并依次执行,减少重复点击:
def run_selected_tasks(): if var1.get() == 1: uninstall_office_365() time.sleep(5) # 给卸载流程留缓冲时间 if var2.get() == 1: run_windows_updates() if var3.get() == 1: install_chrome() if var4.get() == 1: install_office_2019() # 其他任务依次类推 # 添加总执行按钮 btn_run_all = Button(master, text='RUN SELECTED', command=run_selected_tasks) btn_run_all.grid(row=8, column=0, columnspan=2, pady=10)
- 添加状态提示:用Tkinter的
Label显示当前任务进度,比如“正在下载Chrome...”、“Chrome安装完成”,避免用户无感知。
4. 权限与依赖处理
- 脚本需以管理员权限运行,添加权限检测:
import ctypes def is_admin(): try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False if not is_admin(): # 重新以管理员身份启动脚本 ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1) sys.exit()
- 确保安装所需依赖:运行
pip install requests安装下载所需的库。
内容的提问来源于stack exchange,提问作者jpotter20
相关产品推荐
相关产品推荐

