From 3f38af72d94868e69e8712280f77eaa0d5101a7e Mon Sep 17 00:00:00 2001 From: gfdgd_xi <3025613752@qq.com> Date: Thu, 25 Aug 2022 21:47:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E9=87=8A=E5=99=A8=E5=A4=A7=E4=BD=93?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AllInstall.py | 20 +- AutoConfig.py | 185 ++++----- ConfigLanguareRunner.py | 361 ++++++++++++++++++ InstallDll.py | 11 +- InstallFont.py | 39 +- InstallMono.py | 10 +- InstallMsxml.py | 122 +++--- InstallNetFramework.py | 128 ++++--- InstallNewWineHQ.sh | 15 + InstallOther.py | 12 +- InstallVisualCPlusPlus.py | 121 +++--- InstallWineOnDeepin23.py | 4 +- UI/AutoConfig.py | 85 +++++ UI/AutoConfig.ui | 119 ++++++ UI/__pycache__/AutoConfig.cpython-310.pyc | Bin 0 -> 2735 bytes UI/__pycache__/AutoConfig.cpython-37.pyc | Bin 0 -> 2668 bytes __pycache__/InstallDll.cpython-310.pyc | Bin 3360 -> 3600 bytes __pycache__/InstallDll.cpython-37.pyc | Bin 0 -> 3613 bytes __pycache__/InstallFont.cpython-310.pyc | Bin 0 -> 3352 bytes __pycache__/InstallFont.cpython-37.pyc | Bin 0 -> 3321 bytes __pycache__/InstallMsxml.cpython-310.pyc | Bin 0 -> 3306 bytes __pycache__/InstallMsxml.cpython-37.pyc | Bin 0 -> 3273 bytes .../InstallNetFramework.cpython-310.pyc | Bin 0 -> 5536 bytes .../InstallNetFramework.cpython-37.pyc | Bin 0 -> 5504 bytes .../InstallVisualCPlusPlus.cpython-310.pyc | Bin 0 -> 4637 bytes .../InstallVisualCPlusPlus.cpython-37.pyc | Bin 0 -> 4594 bytes information.json | 2 +- mainwindow.py | 21 +- wine/installwine | 2 +- 29 files changed, 933 insertions(+), 324 deletions(-) create mode 100755 ConfigLanguareRunner.py create mode 100644 UI/AutoConfig.py create mode 100644 UI/AutoConfig.ui create mode 100644 UI/__pycache__/AutoConfig.cpython-310.pyc create mode 100644 UI/__pycache__/AutoConfig.cpython-37.pyc create mode 100644 __pycache__/InstallDll.cpython-37.pyc create mode 100644 __pycache__/InstallFont.cpython-310.pyc create mode 100644 __pycache__/InstallFont.cpython-37.pyc create mode 100644 __pycache__/InstallMsxml.cpython-310.pyc create mode 100644 __pycache__/InstallMsxml.cpython-37.pyc create mode 100644 __pycache__/InstallNetFramework.cpython-310.pyc create mode 100644 __pycache__/InstallNetFramework.cpython-37.pyc create mode 100644 __pycache__/InstallVisualCPlusPlus.cpython-310.pyc create mode 100644 __pycache__/InstallVisualCPlusPlus.cpython-37.pyc diff --git a/AllInstall.py b/AllInstall.py index 3748f37..ad61ad8 100755 --- a/AllInstall.py +++ b/AllInstall.py @@ -1,11 +1,11 @@ #!/usr/bin/env python3 # 使用系统默认的 python3 运行 ########################################################################################### -# 作者:gfdgd xi -# 版本:1.5.1 -# 更新时间:2022年07月03日 +# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 +# 版本:2.1.0 +# 更新时间:2022年08月25日 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 -# 基于 Python3 的 tkinter 构建 +# 基于 Python3 构建 ########################################################################################### ################# # 引入所需的库 @@ -26,8 +26,16 @@ def InstallSparkWine(wine): #os.system("sudo apt install apt-fast -y") #os.system(f"sudo ss-apt-fast install \"{wine}\" -y") #return - os.system("sudo ss-apt-fast update") - os.system(f"sudo ss-apt-fast install \"{wine}\" -y") + #os.system("sudo ss-apt-fast update") + if not os.system("which aptss"): + os.system(f"sudo aptss install \"{wine}\" -y") + elif not os.system("which ss-apt-fast"): + os.system("sudo ss-apt-fast update") + os.system(f"sudo ss-apt-fast install \"{wine}\" -y") + elif not os.system("which apt-fast"): + os.system(f"sudo apt-fast install \"{wine}\" -y") + else: + os.system(f"sudo apt install \"{wine}\" -y") ################### # 程序功能 diff --git a/AutoConfig.py b/AutoConfig.py index 815fd91..395e42d 100644 --- a/AutoConfig.py +++ b/AutoConfig.py @@ -1,117 +1,80 @@ +#!/usr/bin/env python3 import os -import PyQt5.QtCore as QtCore -shell = """# “#”后面代表注释 -# 可以为了方便观看改为 bash 的高亮模式 -# 安装 dll -installdll 0 -installdll 1 -# 安装字体 -installfont 0 # 后面参数填 Wine 运行器的字体安装器提示的编号 -# 安装字体(安装星火应用商店的微软核心字体) -installsparkcorefont -# 安装 Mono -installmono -# 安装 gecko -installgecko -# 安装 vcpp -installvcpp 0 # 后面参数填 Wine 运行器的 VCPP 安装器提示的编号 -# 安装 .net -installnet # 后面参数填 Wine 运行器的 VCPP 安装器提示的编号 -# 安装 MSXML -installmsxml # 后面参数填 Wine 运行器的 MSXML 安装器提示的编号 -#aaaaa -""" +import sys +import json +import traceback +import requests +import PyQt5.QtWidgets as QtWidgets +from UI.AutoConfig import * -class Command(): - # 可以被使用的命令 - commandList = [ - "installdll", - "installfont", - "installsparkcorefont", - "installmono", - "installgecko", - "installvcpp", - "installnet", - "installmsxml" - ] - def __init__(self, commandString: str) -> None: - self.commandString = commandString +urlSources = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/auto" +lists = [] - # 解析器 - # 命令字符串转可供解析的列表 - def GetCommandList(self) -> list: - shellList = [] - shellFirstShell = self.commandString.split("\n") - # 转换成可以执行的数组 - for l in range(0, len(shellFirstShell)): - i = shellFirstShell[l] - # 判断有没有注释 - if "#" in i: - # 忽略注释 - i = i[:i.index("#")] - # 删除前后空格 - i = i.strip() - # 如果是空行 - if i == "": - # 忽略此行,此行不做处理 - continue - # 解析 - i = i.split() - # 判断是否为合法的参数,否则提示并忽略 - if not i[0] in self.commandList: - print(f"行{l + 1}命令{i[0]}不存在,忽略") - continue - shellList.append(i) - return shellList +class Connect: + def SearchBotton_Clicked(): + nmodel = QtGui.QStandardItemModel(window) + if ui.searchThings.text() == "": + # 显示全部内容 + for i in lists: + nmodel.appendRow(QtGui.QStandardItem(i[0])) + ui.searchList.setModel(nmodel) + return + for i in lists: + # 显示筛选的内容 + if ui.searchThings.text() in i[0]: + nmodel.appendRow(QtGui.QStandardItem(i[0])) + ui.searchList.setModel(nmodel) - # 运行器 - class Run(): - programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string - def InstallDll(self) -> int: - import InstallDll - return InstallDll.Download(self.wineBottonPath, InstallDll.GetNameByNumber(int(self.command[1])), InstallDll.GetUrlByNumber(int(self.command[1]))) - - def InstallFont(self) -> int: - pass - - def InstallMono(self) -> int: - return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' mono") - - def InstallGecko(self) -> int: - return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' gecko") - - def InstallVCPP(self) -> int: - pass - - def InstallNet(self) -> int: - pass - - def InstallMsxml(self) -> int: - pass - - def InstallSparkCoreFont(self): - pass - - # 可以运行的命令的映射关系 - # 可以被使用的命令的映射 - commandList = { - "installdll": InstallDll, - "installfont": InstallFont, - "installsparkcorefont": InstallSparkCoreFont, - "installmono": InstallMono, - "installgecko": InstallGecko, - "installvcpp": InstallVCPP, - "installnet": InstallNet, - "installmsxml": InstallMsxml - } - # 解析 - def __init__(self, command: list, wineBottonPath: str, wine: str) -> int: - self.wineBottonPath = wineBottonPath - self.wine = wine - for i in command: - self.command = i - self.commandList[i[0]](self) + def RunBotton_Clicked(): + # 获取选中项 + try: + choose = ui.searchList.selectionModel().selectedIndexes()[0].data() + except: + QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件") + return + fileName = "" + for i in lists: + print(i) + if i[0] == choose: + fileName = i[1] + break + # 下载脚本 + try: + print(f"{urlSources}/{fileName}") + file = open("/tmp/wine-runner-auto-config.wsh", "w") + file.write(requests.get(f"{urlSources}/{fileName}").text) + file.close() + except: + traceback.print_exc() + QtWidgets.QMessageBox.critical(window, "错误", "无法获取配置文件") + return + # 执行脚本 + process = QtCore.QProcess() + process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", "WINE=deepin-wine6-stable", "WINEPREFIX=/home/gfdgd_xi/.deepinwine", f"{programPath}/ConfigLanguareRunner.py", "/tmp/wine-runner-auto-config.wsh"]) + process.waitForFinished() -com = Command(shell) -com.Run(com.GetCommandList(), "/home/gfdgd_xi/.wine", "deepin-wine6-stable") \ No newline at end of file + +if __name__ == "__main__": + programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string + app = QtWidgets.QApplication(sys.argv) + window = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(window) + window.show() + # 连接信号和槽 + ui.saerchBotton.clicked.connect(Connect.SearchBotton_Clicked) + ui.runBotton.clicked.connect(Connect.RunBotton_Clicked) + # 解析云列表 + try: + # 获取列表 + lists = json.loads(requests.get(f"{urlSources}/list.json").text) + # 解释列表并显示在 GUI 上 + nmodel = QtGui.QStandardItemModel(window) + for i in lists: + nmodel.appendRow(QtGui.QStandardItem(i[0])) + ui.searchList.setModel(nmodel) + except: + traceback.print_exc() + QtWidgets.QMessageBox.critical(window, "提示", "无法连接服务器") + app.exec_() \ No newline at end of file diff --git a/ConfigLanguareRunner.py b/ConfigLanguareRunner.py new file mode 100755 index 0000000..5d60248 --- /dev/null +++ b/ConfigLanguareRunner.py @@ -0,0 +1,361 @@ +#!/usr/bin/env python3 +# 使用系统默认的 python3 运行 +########################################################################################### +# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 +# 版本:2.1.0 +# 更新时间:2022年08月25日 +# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 +# 基于 Python3 构建 +########################################################################################### +from inspect import trace +import os +import sys +import time +import json +import traceback +import PyQt5.QtWidgets as QtWidgets +# 读取文本文档 +def readtxt(path): + f = open(path, "r") # 设置文件对象 + str = f.read() # 获取内容 + f.close() # 关闭文本对象 + return str # 返回结果 + +programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string +information = json.loads(readtxt(f"{programPath}/information.json")) +version = information["Version"] +thankText = "" +for i in information["Thank"]: + thankText += f"{i}\n" +programEnv = [ + ["($WINEPREFIX)", f"{os.path.expanduser('~')}/.wine"], + ["($WINE)", "deepin-wine6-stable"], + ["($DANGER)", "0"], + ["($HOME)", os.path.expanduser('~')], + ["($PROGRAMPATH)", programPath], + ["($VERSION)", version], + ["($THANK)", thankText], + ["($MAKER)", "gfdgd xi、为什么您不喜欢熊出没和阿布呢"], + ["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢"], + ["($?)", 0] +] +readOnlyEnv = [ + "($DANGER)", + "($HOME)", + "($PROGRAMPATH)", + "($VERSION)", + "($THANK)" +] + +class Command(): + # 有风险的命令 + dangerCommand = [ + "bash", + "bat", + "download" + ] + # 可以被使用的命令 + commandList = [ + "installdll", + "installfont", + "installsparkcorefont", + "installmono", + "installgecko", + "installvcpp", + "installnet", + "installmsxml", + "echo", + "info", + "error", + "warning", + "exit", + "bash", + "bat", + "version", + "thank", + "pause", + "download" + ] + + def __init__(self, commandString: str) -> None: + self.commandString = commandString + + # 解析器 + # 命令字符串转可供解析的列表 + def GetCommandList(self) -> list: + shellList = [] + shellFirstShell = self.commandString.split("\n") + # 转换成可以执行的数组 + for l in range(0, len(shellFirstShell)): + i = shellFirstShell[l] + # 判断有没有注释 + if "#" in i: + # 忽略注释 + i = i[:i.index("#")] + # 删除前后空格 + i = i.strip() + # 如果是空行 + if i == "": + # 忽略此行,此行不做处理 + continue + # 空格转义 + i = i.replace("\\ ", "@Space@") + # 解析 + i = i.split() + # 判断是否为合法的参数,否则提示并忽略 + if not i[0] in self.commandList and i[0][0] != "(": + print(f"行{l + 1}命令{i[0]}不存在,忽略") + programEnv[9][1] = "-2" + continue + if programEnv[2][1] == "0" and i[0] in self.dangerCommand: + print(f"行{l + 1}命令{i[0]}目前解析器不允许运行,忽略") + print("如果需要运行,可以在配置面板开启“允许修改系统”选项(针对GUI用户)") + print("或添加参数 --system(终端调用运行用户)") + programEnv[9][1] = "-1" + continue + rightList = [] + for k in i: + # 处理符号转义 + rightList.append(k.replace("@Space@", " ").replace("\\n", "\n").replace("\\r", "\r")) + shellList.append(rightList) + return shellList + + # 运行器 + class Run(): + close = False + programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string + def Exit(self): + self.close = True + return 0 + + def InstallDll(self) -> int: + import InstallDll + # 如果是数字 + number = False + try: + int(self.command[1]) + number = True + except: + pass + if number: + return InstallDll.Download(self.wineBottonPath, InstallDll.GetNameByNumber(int(self.command[1])), InstallDll.GetUrlByNumber(int(self.command[1]))) + return InstallDll.Download(self.wineBottonPath, self.command[1], InstallDll.GetUrlByName(self.command[1])) + + def Thank(self) -> int: + for i in information["Thank"]: + print(i) + return 0 + + def InstallFont(self) -> int: + import InstallFont + return InstallFont.Download(self.wineBottonPath, int(self.command[1])) + + def InstallMono(self) -> int: + return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' mono") + + def InstallGecko(self) -> int: + return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' gecko") + + def InstallVCPP(self) -> int: + import InstallVisualCPlusPlus + return InstallVisualCPlusPlus.Download(self.wineBottonPath, int(self.command[1]), self.wine) + + def InstallNet(self) -> int: + import InstallNetFramework + return InstallNetFramework.Download(self.wineBottonPath, int(self.command[1]), self.wine) + + def InstallMsxml(self) -> int: + import InstallMsxml + return InstallMsxml.Download(self.wineBottonPath, int(self.command[1]), self.wine) + + def Info(self) -> int: + QtWidgets.QMessageBox.information(None, self.command[1], self.command[2]) + return 0 + + def InstallSparkCoreFont(self): + if not os.system("which aptss"): + # 最新版本星火应用商店处理 + os.system("pkexec bash aptss ssupdate") + return os.system("pkexec bash aptss install ms-core-fonts") + if not os.system("which ss-apt-fast"): + # 稍久的版本 + os.system("pkexec ss-apt-fast update") + return os.system("pkexec bash ss-apt-fast install ms-core-fonts") + # 不知道什么版本的处理方法 + if not os.system("which apt-fast"): + # 稍久的版本 + os.system("pkexec apt-fast update") + return os.system("pkexec apt-fast install ms-core-fonts") + os.system("pkexec apt update") + return os.system("pkexec apt install ms-core-fonts") + + def Echo(self) -> int: + del self.command[0] + print(" ".join(self.command)) + return 0 + + def Warning(self): + QtWidgets.QMessageBox.warning(None, self.command[1], self.command[2]) + return 0 + + def Error(self): + QtWidgets.QMessageBox.critical(None, self.command[1], self.command[2]) + return 0 + + def Bash(self): + command = "" + for i in self.command[1:]: + command += f"'{i}' " + return os.system(command) + + def Bat(self): + command = ["WINEPREFIX='$WINEPREFIX'", "$WINE"] + for i in programEnv: + for k in range(len(command)): + command[k] = command[k].replace(i[0], i[1]) + for i in self.command[1:]: + command.append(i) + commandStr = command[0] + " " + for i in command[1:]: + commandStr += f"{i} " + print(commandStr) + return os.system(commandStr) + + def Version(self): + print(f"版本:{version}") + print(f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢") + return 0 + + def Pause(self) -> int: + input("按回车键继续……") + return 0 + + def Download(self) -> int: + command = f"aria2c -x 16 -s 16 -c '{self.command[1]}' " + try: + command += f"-d '{self.command[2]}' " + command += f"-o '{self.command[3]}' " + except: + pass + return os.system(command) + + # 可以运行的命令的映射关系 + # 可以被使用的命令的映射 + commandList = { + "installdll": InstallDll, + "installfont": InstallFont, + "installsparkcorefont": InstallSparkCoreFont, + "installmono": InstallMono, + "installgecko": InstallGecko, + "installvcpp": InstallVCPP, + "installnet": InstallNet, + "installmsxml": InstallMsxml, + "echo": Echo, + "info": Info, + "warning": Warning, + "error": Error, + "exit": Exit, + "bash": Bash, + "bat": Bat, + "version": Version, + "thank": Thank, + "pause": Pause, + "download": Download + } + + # 参数数列表 + commandInfo = { + "installdll": [1], + "installfont": [1], + "installsparkcorefont": [0], + "installmono": [0], + "installgecko": [0], + "installvcpp": [1], + "installnet": [1], + "installmsxml": [1], + "echo": [1], + "info": [2], + "warning": [2], + "error": [2], + "exit": [0], + "bash": [1], + "bat": [1], + "version": [0], + "thank": [0], + "pause": [0], + "download": [1] + } + + # 解析 + def __init__(self, command: list, wineBottonPath: str, wine: str) -> int: + self.wineBottonPath = wineBottonPath + self.wine = wine + for i in command: + self.command = i + # 变量解析 + if self.command[0][0] == "(" and "=" in self.command[0]: + env = i[0][: i[0].index("=")] + value = i[0][i[0].index("=") + 1:] + # 判断是不是只读变量 + if env in readOnlyEnv: + print(f"运行命令{' '.join(self.command)}出现错误") + print(f"变量 {env} 只读,无法修改,忽略") + continue + change = False + for k in range(len(programEnv)): + # 修改变量 + if env == programEnv[k][0]: + programEnv[k][1] = value + change = True + break + if not change: + # 添加变量 + programEnv.append([f"{env}", value]) + continue + # 正常命令解析 + if len(i) -1 < self.commandInfo[i[0]][0]: + print("参数不足") + continue + # 替换环境变量 + for a in range(1, len(i)): + for b in programEnv: + if b[0] in i[a]: + i[a] = i[a].replace(b[0], b[1]) + commandReturn = self.commandList[i[0]](self) + if commandReturn: + print(f"运行命令{' '.join(self.command)}出现错误") + programEnv[9][1] = str(commandReturn) + if self.close: + break + +if __name__ == "__main__": + app = QtWidgets.QApplication(sys.argv) + optionAll = 0 + if "--system" in sys.argv: + programEnv[2][1] = "1" + optionAll += 1 + if os.getenv("WINE") != None: + programEnv[1][1] = os.getenv("WINE") + if os.getenv("WINEPREFIX") != None: + programEnv[0][1] = os.getenv("WINEPREFIX") + if len(sys.argv) - optionAll < 2: + print("Wine 运行器自动配置文件解析器交互环境") + print(f"版本:{version}") + print(f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢") + print("--------------------------------------------------------------") + while True: + commandLine = input(">") + if commandLine == "exit": + break + com = Command(commandLine) + com.Run(com.GetCommandList(), programEnv[0][1], programEnv[1][1]) + exit() + # 读取文件 + try: + file = open(sys.argv[1], "r") + com = Command(file.read()) + file.close() + except: + print("错误:无法读取该文件,无法继续") + sys.exit(1) + com.Run(com.GetCommandList(), programEnv[0][1], programEnv[1][1]) \ No newline at end of file diff --git a/InstallDll.py b/InstallDll.py index d7d346b..869f13d 100755 --- a/InstallDll.py +++ b/InstallDll.py @@ -2,8 +2,8 @@ # 使用系统默认的 python3 运行 ########################################################################################### # 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 -# 版本:1.8.0 -# 更新时间:2022年08月24日 +# 版本:2.1.0 +# 更新时间:2022年08月25日 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 基于 Python3 构建 ########################################################################################### @@ -32,12 +32,17 @@ def GetUrlByNumber(dllID: int) -> str: def GetNameByNumber(dllID: int) -> str: return lists[dllID][0] +def GetUrlByName(dllName: str): + for i in range(0, len(lists)): + if dllName == lists[i][0]: + return f"{url}/{lists[i][1]}/{lists[i][2]}/{lists[i][0]}" + def Download(wineBotton, dllName, urlPart) -> bool: try: os.remove(f"{wineBotton}/drive_c/windows/system32/{dllName}") except: pass - return not os.system(f"aria2c -x 16 -s 16 -d '{wineBotton}/drive_c/windows/system32' -o '{dllName}' '{urlPart}'") + return os.system(f"aria2c -x 16 -s 16 -d '{wineBotton}/drive_c/windows/system32' -o '{dllName}' '{urlPart}'") def exit(): input("按回车键退出") diff --git a/InstallFont.py b/InstallFont.py index a5e13bc..bb94430 100755 --- a/InstallFont.py +++ b/InstallFont.py @@ -1,9 +1,34 @@ #!/usr/bin/env python3 +# 使用系统默认的 python3 运行 +########################################################################################### +# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 +# 版本:2.1.0 +# 更新时间:2022年08月25日 +# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 +# 基于 Python3 构建 +########################################################################################### +################# +# 引入所需的库 +################# import os import sys import json import shutil import requests +homePath = os.path.expanduser('~') +try: + fontList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/fonts/list.json").text) +except: + fontList = [ + ["fake_simsun.ttc", "https://gitlink.org.cn/api/attachments/392168", "simsun.ttc", "fake_simsun.ttc(会替换容器内的宋体,且与 deepin 有问题)"], + ["simsun.ttc", "https://gitlink.org.cn/api/attachments/392181", "simsun.ttc", "simsun.ttc"], + ["simsunb.ttf", "https://gitlink.org.cn/api/attachments/392180", "simsunb.ttf", "simsunb.ttf"], + ["msyh.ttc", "https://gitlink.org.cn/api/attachments/392182", "msyh.ttc", "msyh.ttc"], + ["msyhl.ttc", "https://gitlink.org.cn/api/attachments/392184", "msyhl.ttc", "msyhl.ttc"], + ["msyhbd.ttc", "https://gitlink.org.cn/api/attachments/392183", "msyhbd.ttc", "msyhbd.ttc"] +] +def Download(wineBotton: str, id: int) -> int: + return os.system(f"aria2c -x 16 -s 16 -d '{wineBotton}/drive_c/windows/Fonts/{fontList[id][2]}' -o '{fontList[id][0]}' \"{fontList[id][1]}\"") if __name__ == "__main__": if "--help" in sys.argv: @@ -17,8 +42,6 @@ if __name__ == "__main__": print("XXX 参数一") print("参数一为需要安装的容器") sys.exit() - - homePath = os.path.expanduser('~') while True: os.system("clear") print(''' @@ -33,17 +56,7 @@ if __name__ == "__main__": if not os.path.exists(f"{sys.argv[1]}/drive_c/windows/Fonts"): input("您选择的不是 Wine 容器,无法继续,按回车键退出") exit() - try: - fontList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/fonts/list.json").text) - except: - fontList = [ - ["fake_simsun.ttc", "https://gitlink.org.cn/api/attachments/392168", "simsun.ttc", "fake_simsun.ttc(会替换容器内的宋体,且与 deepin 有问题)"], - ["simsun.ttc", "https://gitlink.org.cn/api/attachments/392181", "simsun.ttc", "simsun.ttc"], - ["simsunb.ttf", "https://gitlink.org.cn/api/attachments/392180", "simsunb.ttf", "simsunb.ttf"], - ["msyh.ttc", "https://gitlink.org.cn/api/attachments/392182", "msyh.ttc", "msyh.ttc"], - ["msyhl.ttc", "https://gitlink.org.cn/api/attachments/392184", "msyhl.ttc", "msyhl.ttc"], - ["msyhbd.ttc", "https://gitlink.org.cn/api/attachments/392183", "msyhbd.ttc", "msyhbd.ttc"] - ] + for i in range(0, len(fontList)): print(f"{i} {fontList[i][3]}") while True: diff --git a/InstallMono.py b/InstallMono.py index da62561..fd9feb7 100755 --- a/InstallMono.py +++ b/InstallMono.py @@ -2,8 +2,8 @@ # 使用系统默认的 python3 运行 ########################################################################################### # 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 -# 版本:1.8.0 -# 更新时间:2022年08月06日 +# 版本:2.1.0 +# 更新时间:2022年08月25日 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 基于 Python3 构建 ########################################################################################### @@ -65,7 +65,7 @@ except: file = open(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt", "r") version = file.read().replace("\n", "") print("安装版本:", version) - os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"") if exitInputShow: input("安装结束,按回车键退出") exit() @@ -98,7 +98,7 @@ if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.m print("缓存版本:", version.replace("/", "")) print("已经缓存,使用本地版本") file.close() - os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"") if exitInputShow: input("安装结束,按回车键退出") exit() @@ -109,7 +109,7 @@ os.system(f"rm -rf \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install. os.system("mkdir -p /tmp/winegeckomonoinstall") os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}\" -o install.msi \"{programDownloadUrl}\"") print("开始安装") -os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"") +os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"") try: if sys.argv[4] == "1": print("写入缓存") diff --git a/InstallMsxml.py b/InstallMsxml.py index c983afa..49998d1 100755 --- a/InstallMsxml.py +++ b/InstallMsxml.py @@ -2,8 +2,8 @@ # 使用系统默认的 python3 运行 ########################################################################################### # 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 -# 版本:1.8.0 -# 更新时间:2022年08月06日 +# 版本:2.1.0 +# 更新时间:2022年08月25日 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 基于 Python3 构建 ########################################################################################### @@ -14,29 +14,6 @@ import os import sys import json import requests - -if "--help" in sys.argv: - print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装 MSXML") - sys.exit() -if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": - print("您未指定需要安装 MSXML 的容器和使用的 wine,无法继续") - print("参数:") - print("XXX 参数一 参数二 参数三(可略)") - print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为是否缓存(可略),三个参数位置不能颠倒") - sys.exit() - -homePath = os.path.expanduser('~') -print(''' - m m mmmm m m m m m - ## ## #" " # # ## ## # - # ## # "#mmm ## # ## # # - # "" # "# m""m # "" # # - # # "mmm#" m" "m # # #mmmmm - - -''') try: msxmlList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/msxml/list.json").text) except: @@ -45,39 +22,68 @@ except: ["MSXML 4.0 SP3", "https://www.gitlink.org.cn/api/attachments/390678?gfdgd_xi", "msxml4.0SP3.msi"], ["MSXML 6.0", "https://www.gitlink.org.cn/api/attachments/390681?gfdgd_xi", "msxml6_x64.msi"] ] -print("请选择以下的 MSXML 进行安装(不保证能正常安装运行)") -for i in range(0, len(msxmlList)): - print(f"{i}、{msxmlList[i][0]}") -while True: - try: - choose = input("请输入要选择要安装的 MSXML(输入“exit”退出):") - if choose.lower() == "exit": + +def Download(wineBotton: str, id: int, wine: str): + os.system(f"aria2c -x 16 -s 16 -d \"/tmp/deepin-wine-runner-msxml/\" -o \"{msxmlList[id][2]}\" \"{msxmlList[id][1]}\"") + os.system(f"WINEPREFIX='{wineBotton}' '{wine}' msiexec /i \"/tmp/deepin-wine-runner-msxml/{msxmlList[id][2]}\"") + +if __name__ == "__main__": + if "--help" in sys.argv: + print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢") + print("版本:1.0.0") + print("本程序可以更方便的在 wine 容器中安装 MSXML") + sys.exit() + if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": + print("您未指定需要安装 MSXML 的容器和使用的 wine,无法继续") + print("参数:") + print("XXX 参数一 参数二 参数三(可略)") + print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为是否缓存(可略),三个参数位置不能颠倒") + sys.exit() + + homePath = os.path.expanduser('~') + print(''' + m m mmmm m m m m m + ## ## #" " # # ## ## # + # ## # "#mmm ## # ## # # + # "" # "# m""m # "" # # + # # "mmm#" m" "m # # #mmmmm + + +''') + + print("请选择以下的 MSXML 进行安装(不保证能正常安装运行)") + for i in range(0, len(msxmlList)): + print(f"{i}、{msxmlList[i][0]}") + while True: + try: + choose = input("请输入要选择要安装的 MSXML(输入“exit”退出):") + if choose.lower() == "exit": + break + choose = int(choose) + except: + print("输入错误,请重新输入") + continue + if 0 <= choose and choose < len(msxmlList): break - choose = int(choose) + try: + if choose.lower() == "exit": + exit() except: - print("输入错误,请重新输入") - continue - if 0 <= choose and choose < len(msxmlList): - break -try: - if choose.lower() == "exit": + pass + print(f"您选择了 {msxmlList[choose][0]}") + if len(sys.argv) <= 3: + choice = True + else: + choice = (sys.argv[3] == "1") + if os.path.exists(f"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}") and choice: + print("已经缓存,使用本地版本") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"") + input("安装结束,按回车键退出") exit() -except: - pass -print(f"您选择了 {msxmlList[choose][0]}") -if len(sys.argv) <= 3: - choice = True -else: - choice = (sys.argv[3] == "1") -if os.path.exists(f"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}") and choice: - print("已经缓存,使用本地版本") - os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} msiexec /i \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"") - input("安装结束,按回车键退出") - exit() -print("开始下载") -os.system(f"rm -rfv \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"") -os.system(f"mkdir -p \"{homePath}/.config/deepin-wine-runner/MSXML/\"") -os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.config/deepin-wine-runner/MSXML\" -o \"{msxmlList[choose][2]}\" \"{msxmlList[choose][1]}\"") -print("开始安装") -os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} msiexec /i \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"") -input("安装结束,按回车键退出") \ No newline at end of file + print("开始下载") + os.system(f"rm -rfv \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"") + os.system(f"mkdir -p \"{homePath}/.config/deepin-wine-runner/MSXML/\"") + os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.config/deepin-wine-runner/MSXML\" -o \"{msxmlList[choose][2]}\" \"{msxmlList[choose][1]}\"") + print("开始安装") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"") + input("安装结束,按回车键退出") \ No newline at end of file diff --git a/InstallNetFramework.py b/InstallNetFramework.py index c841039..8a29b65 100755 --- a/InstallNetFramework.py +++ b/InstallNetFramework.py @@ -2,8 +2,8 @@ # 使用系统默认的 python3 运行 ########################################################################################### # 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 -# 版本:1.8.0 -# 更新时间:2022年08月01日 +# 版本:2.1.0 +# 更新时间:2022年08月25日 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 基于 Python3 构建 ########################################################################################### @@ -14,29 +14,6 @@ import os import sys import json import requests - -if "--help" in sys.argv: - print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装 .net framework") - sys.exit() -if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": - print("您未指定需要安装 .net framework 的容器和使用的 wine,无法继续") - print("参数:") - print("XXX 参数一 参数二 参数三(可略)") - print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为是否缓存(可略),三个参数位置不能颠倒") - sys.exit() - -homePath = os.path.expanduser('~') -print(''' - mm m mmmmmmmmmmmmm - #"m # # # - # #m # #mmmmm # - # # # # # - # # ## #mmmmm # - - -''') try: netList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/net/list.json").text) except: @@ -54,40 +31,69 @@ except: ["4.7.2 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/1f5af042-d0e4-4002-9c59-9ba66bcf15f6/089f837de42708daacaae7c04b7494db/ndp472-kb4054530-x86-x64-allos-enu.exe"], ["4.8 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/2d6bb6b2-226a-4baa-bdec-798822606ff1/8494001c276a4b96804cde7829c04d7f/ndp48-x86-x64-allos-enu.exe"] ] -print("请选择以下的 .net framework 进行安装(不保证能正常安装运行)") -for i in range(0, len(netList)): - print(f"{i} .net framework {netList[i][0]}") -while True: - try: - choose = input("请输入要选择的 .net framework 版本(输入“exit”退出):").lower() - if choose == "exit": - break - choose = int(choose) - except: - print("输入错误,请重新输入") - continue - if 0 <= choose and choose < len(netList): - break -if choose == "exit": - exit() -if len(sys.argv) <= 3: - choice = True -else: - choice = (sys.argv[3] == "1") -print(f"您选择了 .net framework {netList[choose][0]}") -print(f"如果是 Offline Installer 版本,提示需要连接互联网,其实是不需要的,断网也可以安装") -print(f"如果 Offline Installer 版本连接网络时安装失败,提示无法连接服务器或连接超时,可以尝试下载完安装包加载过程中断网以便断网安装") -print(f"一般建议 Offline Installer 版本在下载完 exe 安装程序后在加载过程中断网以便提高安装速度") -programName = os.path.split(netList[choose][1])[1] -if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/.netframework/{programName}") and choice: - print("已经缓存,使用本地版本") - os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'") - input("安装结束,按回车键退出") - exit() -print("开始下载") -os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'") -os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/.netframework'") -os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.cache/deepin-wine-runner/.netframework\" -o \"{programName}\" \"{netList[choose][1]}\"") -os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'") -input("安装结束,按回车键退出") \ No newline at end of file +def Download(wineBotton: str, id: int, wine: str): + programName = os.path.split(netList[id][1])[1] + os.system(f"aria2c -x 16 -s 16 -d \"/tmp/deepin-wine-runner-net\" -o \"{programName}\" \"{netList[id][1]}\"") + os.system(f"WINEPREFIX='{wineBotton}' '{wine}' '/tmp/deepin-wine-runner-net/{programName}'") + +if __name__ == "__main__": + if "--help" in sys.argv: + print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢") + print("版本:1.0.0") + print("本程序可以更方便的在 wine 容器中安装 .net framework") + sys.exit() + if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": + print("您未指定需要安装 .net framework 的容器和使用的 wine,无法继续") + print("参数:") + print("XXX 参数一 参数二 参数三(可略)") + print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为是否缓存(可略),三个参数位置不能颠倒") + sys.exit() + + homePath = os.path.expanduser('~') + print(''' + mm m mmmmmmmmmmmmm + #"m # # # + # #m # #mmmmm # + # # # # # + # # ## #mmmmm # + + +''') + print("请选择以下的 .net framework 进行安装(不保证能正常安装运行)") + for i in range(0, len(netList)): + print(f"{i} .net framework {netList[i][0]}") + while True: + try: + choose = input("请输入要选择的 .net framework 版本(输入“exit”退出):").lower() + if choose == "exit": + break + choose = int(choose) + except: + print("输入错误,请重新输入") + continue + if 0 <= choose and choose < len(netList): + break + + if choose == "exit": + exit() + if len(sys.argv) <= 3: + choice = True + else: + choice = (sys.argv[3] == "1") + print(f"您选择了 .net framework {netList[choose][0]}") + print(f"如果是 Offline Installer 版本,提示需要连接互联网,其实是不需要的,断网也可以安装") + print(f"如果 Offline Installer 版本连接网络时安装失败,提示无法连接服务器或连接超时,可以尝试下载完安装包加载过程中断网以便断网安装") + print(f"一般建议 Offline Installer 版本在下载完 exe 安装程序后在加载过程中断网以便提高安装速度") + programName = os.path.split(netList[choose][1])[1] + if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/.netframework/{programName}") and choice: + print("已经缓存,使用本地版本") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'") + input("安装结束,按回车键退出") + exit() + print("开始下载") + os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'") + os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/.netframework'") + os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.cache/deepin-wine-runner/.netframework\" -o \"{programName}\" \"{netList[choose][1]}\"") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'") + input("安装结束,按回车键退出") \ No newline at end of file diff --git a/InstallNewWineHQ.sh b/InstallNewWineHQ.sh index 8347126..7c2a986 100755 --- a/InstallNewWineHQ.sh +++ b/InstallNewWineHQ.sh @@ -1,4 +1,15 @@ #!/bin/bash +# 使用系统默认的 bash 运行 +########################################################################################### +# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 +# 版本:2.1.0 +# 更新时间:2022年08月25日 +# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 +# 基于 Python3 构建 +########################################################################################### +################# +# 引入所需的库 +################# echo echo 'm m " m m mmmm ' echo '# # # mmm m mm mmm # # m" "m' @@ -60,6 +71,10 @@ which ss-apt-fast > /dev/null if [ $? == 0 ]; then apt="ss-apt-fast" fi +which aptss > /dev/null +if [ $? == 0 ]; then + apt="aptss" +fi # 添加源 if [ $system = "0" ]; then ${debianSource[$systemVersion]} diff --git a/InstallOther.py b/InstallOther.py index e6586ff..79840f2 100755 --- a/InstallOther.py +++ b/InstallOther.py @@ -2,8 +2,8 @@ # 使用系统默认的 python3 运行 ########################################################################################### # 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 -# 版本:1.8.0 -# 更新时间:2022年08月01日 +# 版本:2.1.0 +# 更新时间:2022年08月25日 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 基于 Python3 构建 ########################################################################################### @@ -66,11 +66,11 @@ print(f"您选择了{msxmlList[choose][0]}") if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}") and choice: print("已经缓存,使用本地版本") if msxmlList[choose][2] == "msi": - os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} msiexec /i '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") input("安装结束,按回车键退出") sys.exit() if msxmlList[choose][2] == "exe": - os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") input("安装结束,按回车键退出") sys.exit() print("开始下载") @@ -79,12 +79,12 @@ os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/other'") if msxmlList[choose][2] == "msi": os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/other' -o '{msxmlList[choose][3]}' \"{msxmlList[choose][1]}\"") print("开始安装") - os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} msiexec /i '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") print("安装结束") sys.exit() if msxmlList[choose][2] == "exe": os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/other' -o '{msxmlList[choose][3]}' \"{msxmlList[choose][1]}\"") print("开始安装") - os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'") input("安装结束,按回车键退出") sys.exit() \ No newline at end of file diff --git a/InstallVisualCPlusPlus.py b/InstallVisualCPlusPlus.py index 826d2ff..ace14b6 100755 --- a/InstallVisualCPlusPlus.py +++ b/InstallVisualCPlusPlus.py @@ -2,8 +2,8 @@ # 使用系统默认的 python3 运行 ########################################################################################### # 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 -# 版本:1.8.0 -# 更新时间:2022年08月01日 +# 版本:2.1.0 +# 更新时间:2022年08月25日 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 基于 Python3 构建 ########################################################################################### @@ -14,21 +14,46 @@ import os import sys import json import requests +try: + netList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vscpp/list.json").text) +except: + netList = [ + ["2005 Service Pack 1 Redistributable Package MFC 安全更新", "https://download.microsoft.com/download/4/A/2/4A22001F-FA3B-4C13-BF4E-42EC249D51C4/vcredist_x86.EXE", "vcredist05_x86.exe"], + ["2008 (VC++ 9.0) SP1 (不再支持) X86", "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe", "vcredist08_x86.exe"], + ["2008 (VC++ 9.0) SP1 (不再支持) X64", "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x64.exe", "vcredist08_x86.exe"], + ["2010 (VC++ 10.0) SP1 (不再支持) X86", "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe", "vcredist10_x86.exe"], + ["2010 (VC++ 10.0) SP1 (不再支持) X64", "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe", "vcredist10_x64.exe"], + ["2012 (VC++ 11.0) Update 4 X86", "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe", "vcredist12_x86.exe"], + ["2012 (VC++ 11.0) Update 4 X64", "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe", "vcredist12_x64.exe"], + ["2013 (VC++ 12.0) X86", "https://aka.ms/highdpimfc2013x86enu", "vcredist13_x86.exe"], + ["2013 (VC++ 12.0) X64", "https://aka.ms/highdpimfc2013x64enu", "vcredist13_x64.exe"], + ["2015、2017、2019 和 2022 X86", "https://aka.ms/vs/17/release/vc_redist.x86.exe", "vc_redist15.x86.exe"], + ["2015、2017、2019 和 2022 X64", "https://aka.ms/vs/17/release/vc_redist.x64.exe", "vc_redist15.x64.exe"], + ["2015、2017、2019 和 2022 ARM64", "https://aka.ms/vs/17/release/vc_redist.arm64.exe", "vc_redist15.arm64.exe"] + ] +def Download(wineBotton: str, id: int, wine: str) -> int: + try: + os.remove(f"/tmp/deepin-wine-runner-vcpp/{netList[id][2]}") + except: + pass + os.system(f"aria2c -x 16 -s 16 -d '/tmp/deepin-wine-runner-vcpp' -o '{netList[id][2]}' \"{netList[id][1]}\"") + os.system(f"WINEPREFIX='{wineBotton}' '{wine}' '/tmp/deepin-wine-runner-vcpp/{netList[id][2]}'") -if "--help" in sys.argv: - print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢") - print("版本:1.0.0") - print("本程序可以更方便的在 wine 容器中安装 Visual Studio C++") - sys.exit() -if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": - print("您未指定需要安装 Visual Studio C++ 的容器和使用的 wine,无法继续") - print("参数:") - print("XXX 参数一 参数二 参数三(可略)") - print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为是否缓存(可略),三个参数位置不能颠倒") - sys.exit() +if __name__ == "__main__": + if "--help" in sys.argv: + print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢") + print("版本:1.0.0") + print("本程序可以更方便的在 wine 容器中安装 Visual Studio C++") + sys.exit() + if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": + print("您未指定需要安装 Visual Studio C++ 的容器和使用的 wine,无法继续") + print("参数:") + print("XXX 参数一 参数二 参数三(可略)") + print("参数一为需要安装的容器,参数二为需要使用的wine,参数三为是否缓存(可略),三个参数位置不能颠倒") + sys.exit() -homePath = os.path.expanduser('~') -print(''' + homePath = os.path.expanduser('~') + print(''' m m mmm "m m" m" " m m # # # # # @@ -37,42 +62,32 @@ print(''' ''') -try: - netList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/vscpp/list.json").text) -except: - netList = [ - ["2005 Service Pack 1 Redistributable Package MFC 安全更新", "https://download.microsoft.com/download/4/A/2/4A22001F-FA3B-4C13-BF4E-42EC249D51C4/vcredist_x86.EXE", "vcredist05_x86.exe"], - ["2008 (VC++ 9.0) SP1 (不再支持) ", "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe", "vcredist08_x86.exe"], - ["2010 (VC++ 10.0) SP1 (不再支持) ", "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe", "vcredist10_x86.exe"], - ["2012 (VC++ 11.0) Update 4", "https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe", "vcredist12_x86.exe"], - ["2013 (VC++ 12.0) ", "https://download.visualstudio.microsoft.com/download/pr/10912113/5da66ddebb0ad32ebd4b922fd82e8e25/vcredist_x86.exe", "vcredist13_x86.exe"], - ["2015、2017、2019 和 2022", "https://aka.ms/vs/17/release/vc_redist.x86.exe", "vcredist15_x86.exe"] - ] -print("请选择以下的 Visual Studio C++ 进行安装(不保证能正常安装运行)") -for i in range(0, len(netList)): - print(f"{i} Visual Studio C++ {netList[i][0]}") -while True: - try: - choose = input("请输入要选择的 Visual Studio C++ 版本(输入“exit”退出):").lower() - if choose == "exit": + + print("请选择以下的 Visual Studio C++ 进行安装(不保证能正常安装运行)") + for i in range(0, len(netList)): + print(f"{i} Visual Studio C++ {netList[i][0]}") + while True: + try: + choose = input("请输入要选择的 Visual Studio C++ 版本(输入“exit”退出):").lower() + if choose == "exit": + break + choose = int(choose) + except: + print("输入错误,请重新输入") + continue + if 0 <= choose and choose < len(netList): break - choose = int(choose) - except: - print("输入错误,请重新输入") - continue - if 0 <= choose and choose < len(netList): - break -if choose == "exit": - exit() -print(f"您选择了 Visual Studio C++ {netList[choose][0]}") -if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}"): - print("已经缓存,使用本地版本") - os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'") - input("安装结束,按回车键退出") - exit() -print("开始下载") -os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'") -os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/vcpp'") -os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/vcpp' -o '{netList[choose][2]}' \"{netList[choose][1]}\"") -os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'") -input("安装结束,按回车键退出") \ No newline at end of file + if choose == "exit": + exit() + print(f"您选择了 Visual Studio C++ {netList[choose][0]}") + if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}"): + print("已经缓存,使用本地版本") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'") + input("安装结束,按回车键退出") + exit() + print("开始下载") + os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'") + os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/vcpp'") + os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/vcpp' -o '{netList[choose][2]}' \"{netList[choose][1]}\"") + os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'") + input("安装结束,按回车键退出") \ No newline at end of file diff --git a/InstallWineOnDeepin23.py b/InstallWineOnDeepin23.py index 2f81807..fb77be1 100755 --- a/InstallWineOnDeepin23.py +++ b/InstallWineOnDeepin23.py @@ -2,8 +2,8 @@ # 使用系统默认的 python3 运行 ########################################################################################### # 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 -# 版本:1.8.0 -# 更新时间:2022年08月02日 +# 版本:2.1.0 +# 更新时间:2022年08月25日 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 基于 Python3 构建 ########################################################################################### diff --git a/UI/AutoConfig.py b/UI/AutoConfig.py new file mode 100644 index 0000000..dc727d2 --- /dev/null +++ b/UI/AutoConfig.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'AutoConfig.ui' +# +# Created by: PyQt5 UI code generator 5.15.6 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(800, 600) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralwidget) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.searchTips = QtWidgets.QLabel(self.centralwidget) + self.searchTips.setObjectName("searchTips") + self.horizontalLayout.addWidget(self.searchTips) + self.searchThings = QtWidgets.QLineEdit(self.centralwidget) + self.searchThings.setObjectName("searchThings") + self.horizontalLayout.addWidget(self.searchThings) + self.saerchBotton = QtWidgets.QPushButton(self.centralwidget) + self.saerchBotton.setObjectName("saerchBotton") + self.horizontalLayout.addWidget(self.saerchBotton) + self.verticalLayout_3.addLayout(self.horizontalLayout) + self.searchList = QtWidgets.QListView(self.centralwidget) + self.searchList.setObjectName("searchList") + self.verticalLayout_3.addWidget(self.searchList) + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_2.addItem(spacerItem) + self.runBotton = QtWidgets.QPushButton(self.centralwidget) + self.runBotton.setObjectName("runBotton") + self.horizontalLayout_2.addWidget(self.runBotton) + self.verticalLayout_3.addLayout(self.horizontalLayout_2) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 36)) + self.menubar.setObjectName("menubar") + self.menu_2 = QtWidgets.QMenu(self.menubar) + self.menu_2.setObjectName("menu_2") + self.menu = QtWidgets.QMenu(self.menubar) + self.menu.setObjectName("menu") + MainWindow.setMenuBar(self.menubar) + self.about = QtWidgets.QAction(MainWindow) + self.about.setObjectName("about") + self.exitProgram = QtWidgets.QAction(MainWindow) + self.exitProgram.setObjectName("exitProgram") + self.help = QtWidgets.QAction(MainWindow) + self.help.setObjectName("help") + self.openFile = QtWidgets.QAction(MainWindow) + self.openFile.setObjectName("openFile") + self.menu_2.addAction(self.help) + self.menu_2.addSeparator() + self.menu_2.addAction(self.about) + self.menu.addAction(self.openFile) + self.menu.addSeparator() + self.menu.addAction(self.exitProgram) + self.menubar.addAction(self.menu.menuAction()) + self.menubar.addAction(self.menu_2.menuAction()) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "自动部署脚本")) + self.searchTips.setText(_translate("MainWindow", "搜索内容(为空代表显示所有内容):")) + self.saerchBotton.setText(_translate("MainWindow", "搜索")) + self.runBotton.setText(_translate("MainWindow", "部署此方案")) + self.menu_2.setTitle(_translate("MainWindow", "帮助")) + self.menu.setTitle(_translate("MainWindow", "程序")) + self.about.setText(_translate("MainWindow", "关于")) + self.exitProgram.setText(_translate("MainWindow", "退出程序")) + self.help.setText(_translate("MainWindow", "帮助")) + self.openFile.setText(_translate("MainWindow", "打开本地部署脚本")) diff --git a/UI/AutoConfig.ui b/UI/AutoConfig.ui new file mode 100644 index 0000000..9b491ca --- /dev/null +++ b/UI/AutoConfig.ui @@ -0,0 +1,119 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + 自动部署脚本 + + + + + + + + + 搜索内容(为空代表显示所有内容): + + + + + + + + + + 搜索 + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 部署此方案 + + + + + + + + + + + 0 + 0 + 800 + 36 + + + + + 帮助 + + + + + + + + 程序 + + + + + + + + + + + 关于 + + + + + 退出程序 + + + + + 帮助 + + + + + 打开本地部署脚本 + + + + + + diff --git a/UI/__pycache__/AutoConfig.cpython-310.pyc b/UI/__pycache__/AutoConfig.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7373c61da773fab5118b1c15ef9df20f770f812b GIT binary patch literal 2735 zcmZuz-ES0C6rb7e-R^Fee$h%rTKQh8>X=Z^hI zO-KNtn5c<~F{BT>%0n?ojQRi-`9rSpMcFNV;@v0DxidTcke$q(bARV|&pG$woV!*k zl~CZP{T0donNgH~u(SOag3c*;?H*`|Lezp%RHxNqU^-9?P6t)xtU>}LcugTe8oC;s z4wKNN(i`3cw$d9Ekt`pz7!~0xKkFDGp5>PeGDEqYN5b}B06M4OwL77q%Ct(9=>Snl z;F>ZWBta5_Z-|7!ctoV83~gLD%u9wztob|+t^a}`#NZu;*Zvzc%W4^-uBa+XV2%VU z0af9Fa&Q^YWkm}uD{~>>gpdPx82eHa0Vx8Su&0Su6yV1IjR6|*(74Y}fRq4D6g867 zfQZLS`n(iKDd5F+@KPQx?eiKzY6M<<2d~lVMamh_OB)dN9)DC5NKG(G`UN>s#weOR z>+T$y0ci$KgNL?|BuVkWT6R^(mi+q3iCDI5_fMhC?BXNc7@%RU@FL$B~q%QDSpT(A@8#LXZ zsr!4`9V7i6^!yzH>=1BTJiB%LFyMy)Z{39-0sIKyZM*OuzcS}}}->b7+{IG|2N>+FI)rztM>Dofdui<=PX8Y&*%12$9D3B2C6C$yd4#ok< z0plY$`XZI5CTDtKUgn(0d`cNN@_J!RU$h*q4T{XH#f&A(;BRHw1G`57n?26h&XdhcMww%JcwYlNKGfFGZ8^S8xSG< zim;x8z(fOGF!*_9%`m+vLbJ3`5;3bp&3BCg?d=ySoAM8Gb2QH<^dc1zMr~t>GAvah znso~di(;=KdvU~CaHq?#ECBM}77|A!k{#1?w7{?qinvaQYXEB1m|@a0#Ne#K9eLid zXGa{IK18qi)&-ozp1; zrZrBv?(T+Y%3G!hF-#ULZjUVD?!X-ovT5Nmi=c;u?Jvk(g`EKC-RkV6hg+kTdD)mbT3QrQSO%vwWi*0Uy97-_P0A+?Ez0;!?`mBPwe33? z+xxDSooyN{qAhHj;7J5B>Qd{DYwM^N&;PEkFvKRWug4&8Wlo(7KrvR~!jkvlRauas z@Py#1LL}%T5f2IZNYq2ZJ`yX(<*0~{Bs?VQBMsiDn2#hqB<>?A581Ml_K<|jk)^3& zLTOE%=;M&)#8^3*D{rr0M{=;XFZa#UizHxW` z$?rcrt*q6)d%SUHy|!|twz^U$tUP;k+rh)+j&pE3U7NL^?$o}0SgYKW>gt30)mwL^ zxUu#{b^R+Bz5eTy^)DSv-_0vmsyEg>9VS6-<(ujwaCNV``t$ZEdmG*S%4G4c%;{1I zQdq|%5^+BhL>hL}{X25O;05Yd6FhPk=mMAJLguwhOA$j{(l9}vmy5kYHjFAaYc$`F z%o(?N6ZOZTc^_UI^EswwUoi1pfnJJNfVc literal 0 HcmV?d00001 diff --git a/UI/__pycache__/AutoConfig.cpython-37.pyc b/UI/__pycache__/AutoConfig.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebd2bd8dc4710004c59f4e02053efbb9a93296f4 GIT binary patch literal 2668 zcmZuz-ESL35Wlm}=a1Nq>m+SL(~pFH#6TOV6%rB%wF#vyN^rl! zM?Ms!N^NOVBtSw!sLF#4eMnKM5b)53(m&)7FHk$pQ{Q=FW^a9oqn>qhv%mT6?Ci(P zdL)xcN$}`@tEInklJqY&T8{$C8F<|x5T<0xWvL=-awVcgDp4&eOXnpsVn%OBW|Sz` zqgu>Vrldk_3)oU2>Z?UI>QLgxitM~+`N<-?Vwtmqxg{jDo(L#s;C1^!5J{6wNsE}W z8Mz^8Q8Q{P@KwwhI9C14w55+5mVL#tO=qEmUGa&+n}Bx|UiTkBSL7N*TbE_jz?B)T zM`VdbYS9%yS0r6ok>(ZPD98akhHY+9K~upJ6P9>g0)7I}1fZ%wlOaC^S_&+2v~X4j zB7&C=c^S|$z)Q68GJ=;4d7Yqj0x#Ld>l7`umIFKY0a5P>d*wmPLoYrq=xPn4$P4em z9J&DM0#1iOyUnzjVUhWs`Mq53t1F*JIHz|dA~@S|^?{`idS^u>U3`Q-(F)?~;w`!M z3UC$FA;$e;#rpy4uN`0qYlqBE_(jZIopU%YnR^8PFt+(l41hKOBerI-Z5ag1AXr-C zy&Cl4;~f#>9R=(taJq%x7JdxyV}SSU!jA)f9Pqun@FBp50N;l==mWI^GQ-wub!i8F zRN#Z0H59g5tN=eI@P5u3ti4{B+K_>5r1l2R2WEC~{zUC$pqmmTL+^y2+D--QFyw&s zF&uqAQzAB_MtOnfnxFfOP-c~k@|dyYcuYU-=jI%0Eju=AVSdUb1})89vZ}717W$lJ z&tl6UU>R{3bL9mq(n%V7e5`0w5Q*kt8B&am<(@Ws0>=OB$vbIM9;CG0P_BOpDQupy#CL z&W(6DeVT5O1K*tNvdb1(pcydHY|vw>YLp1Q$VdeSo`N7Jow8M0(vs&EtA=gDx@z%p z%eE?BMT^7G$fSF)Zw}@-8tk5kCs7=SB^og(?c&aXaGp37!srsk>ZiquAHkBq2YD3N zp7tOPTgpUNSe~;bX2AsZqIn;RUKD*u#K{L{Ee+}vsT$N^4%Je)If2E`P#Dp$-Lk>R zv<1@|C(H(NpY@nC>eyGU*^|{JKMwQqs?$~{xN)l> zBsnFg`7a9+b^K;`$pAxZZyRH0JMhvjv)~bZq0GzqNJ?JrX}g0?ig?=Yq8Nn5@1m!m zFlk<%k3eOW;r8Jd+jU-Dp^7MQ?;sKl5mg{ch{OdF3z0-E$$P0Gk`hQfL^?#TM2MsX zk_?fIK(_s41(FIlyv}q?@LlxsFqP-GernuV-@3lO`RA|CZ`^IJJ@8Hg-27&3^Ywk-#a^a$=gaoR|^$yUb1Ev?y%w1CYOq zS%h0NJ527OE#|rajLzclEa?;a$wNkXUU_ywI2+*KQ+MGMnJ_oFd_bJ}A*b9KUKWOD z<*6XHs1Ec2-7O%yHQS%V!b2t&d;AdmBP@zj+9%mnX;17mZGTM3PM_E(s9^19i{~`j zvBg<+5vE%rV^N&zg6p8upFd-9)BQwy6 zT|$e>TN?AA&YwY^A0eiqg;%)KIq#NnL8!qcy3plU*~i!13Q}6E43g*-ToY%=ZqP1&SCbI8A z`_Hj)zlaW{G7f=k-(yi}Vud)+uhJwh=;FU_Kfawp)?d^MJZ1p9!Mq!3p#A9w^^)F< z(Lbdg(nqYVc6d<-e7R?6n=M|!5~ZW?#K>WRdMkB}1Mq(%-&Ymd{zJfZwsh&}N8bD7084I>nq5H-&vPu)n8!=q)CU&9E-{DKdaiAQhJ)iDv%icI9(>_dzU`{6A}Rv z5I{gh=yjd>0`9PY-%)RZK6*RLfk9K?L(I@SA8F=O8u_b5accNFtG8o<4rx=4B{Q;Q z!&}41Xrd=o)iSAYt_zG{eY|=yM5*^M_)s?A`TYIHCe{e?6)6W}mbf}4?zd+UDS%LRqc zE1}!Anyp=wG~)HOn}N(Jd`6M1?aNzRC}mM86I*iK3+lMHIyRl-UZeQyn=P^3#5dGq R@gIe|sT$8%;e*t@{{hXAHW2^- delta 1203 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 literal 0 HcmV?d00001 diff --git a/__pycache__/InstallFont.cpython-310.pyc b/__pycache__/InstallFont.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..350962dbeeb21a305feebf0dd43eca6fc0bcbf7f GIT binary patch literal 3352 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 BJ)8gl literal 0 HcmV?d00001 diff --git a/__pycache__/InstallMsxml.cpython-310.pyc b/__pycache__/InstallMsxml.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91b889fb4a3cd35d65f435f639f3bedb7a945e76 GIT binary patch literal 3306 zcmbtXTWlN072R3BDN%A1nSQ0|hH4|r3AuXMlAX3`&^kp8#D)+RuuPy3R-6&FCU;5i z!;%T3pshHzD!F#zM;%K_BnNhsz?O`(Kx93lujaqM`tK zaaXR6@Uw2>n)P6Q4xRMQp}6ljr#2#vev%w^-9ga0S?ht;75AOsu$TC;j|8xv_=mhW zfP?S2<3Un~>r(txq+P`I1f8ru&1t4B>4lq!T*E z&+X!HQ;M%j+Z;(d0}Rhs8Jes8_G%w~ijh0HZT30519s8`Yj##KyIB7`rWSo;XpBG1 z{k}2YOhTl2io?5!k2HfNZWlMj&A2G`)Sm)eu8C~NFN~phn1p9{%yIZfDPFq|@!3NH z1gyrxFb+7e0$VTAbtkw}AA*%|3Ta=FuwyO7X;RH5JQf$yh=alS4R(2S#OaL{>>uGgXyn(X^}^q9%=qgPNo!hDAlv4WfyPKB}Ze zIvG2uXVf-VE_Af7|L9x7{#d)v*V~zUZNt*Y$jEmMNm*Hx3`0r`D?~MPvFlKKch8|; zZrIP&GxqLSdrZ;g?^1XDaO#7b)QyZ9ob2oEsj5 znh_!u9^883iogib5sKvMj~_YqX7Af?{^m&kFIsc1R-rZbYO4S{CZi-Fi1M?D+gui( z(Jilj1`J|y-~rqdZ6{K<)HT>M*ws0>i9Ss9l#y|^x^<)C5mh&&bowYwIvPgZWN+e>5idv{FATpGVroW2hf9gyzr z<{?mlT$-P-m#^4Y77HtPi&K9s-h5Q}a=mo>9ea9Spl2o63y=G0d3W7#~!UnXdDp@B4g_ah9)|LoBp;Cz{n35R* zj3Y!^7>_f(p#(G(iit$%QYaDVlt=_DRF#_;m<1isfIS7w0f{WCZ`c`JXW6 z5jeN<;un?tcyZ!W$iu?Y1Wga;wJfhsmFFg%Y=ZDZfD7w0<;8Ol=Hi2o?WHAWs=R&` zU~nuZz146#erM9x4rt3?Ub8RUg^YCgYpGc?0jv(@>-;nsm5s0SGnITEZV@}=+m@Ru z%@-*fqpDp0puD&U$4`B}c)571Y30gBu2ruJ+){h`p>ut6bz2_ACrHSJo_Y{9Kae;~?6#Ixt`%oK0#}QZ zkH22O#0&4t9kpA35a)jZ7mnj6d|e&ofaawppwF}CPcF^Zh5xvk=%~| z@bu?epSjw3|1~f5eA6fARNMAw^g*y(@P=D%`u%VDHFC-%x}jSh`hx0~D@hE?ZIDqz zqd(38YiO2BR*l+ws!9qO7_i)umOO2FvKpOhV$d{EEq7KjhOHnO%}OdZb)s4R;fz9h zsn!EOMUuoqvgMK0tZ7)@#Be5~6KZ<|kW`ct#PULlfJ++v@4&uFwlp*=EdS4y3^vo` zb^7I|=b`b}`w{){D2%+w%R@!pe}=t5caZ7n+`ih#kLr2Q1e?$cu!0ADJ#s_!!pM!9 isqP0aRdJ{%pZhGaRO>WF($*>zx@khwM0z- literal 0 HcmV?d00001 diff --git a/__pycache__/InstallMsxml.cpython-37.pyc b/__pycache__/InstallMsxml.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68c0bc679abe6b35355a93f79f33a6533b0b26fc GIT binary patch literal 3273 zcmbtW|8o<^6~DccWLa1S93u>A(~C@FoFJVI)Pb~3J1OZDCNQ4R8M~TkJc@Ra59vP zUWf?e0m2ttL@2m1Kab9O=24_&h*S3?j=osHF6@pA*n?ZJ7y4H0!`tFQT!^&%j#K$z zj(ABc@#40;fc?1r16RaHw&Cpwen!v^;2i{=ZA*Bxd&G}-P9VfV-%;73>83#5fmTihOQmYWkOdIr6>Z-~phGro`P!atfo zkpKx4cF%KIgk2&H4{{KJ0M$d>x}3Oy#TT8mV<((AfxSQi0saIDIF=K@teqI7{3nLE z@vbebk4XCj#041J9L9RI{Wu672AUr7Y+sG&bu$Z3@V-cw+Rmcb4agrS_(&I_@z_H; zV2>}=8DO7ukMn4T*UphH*7|V|W8?~Z@&3j+z?xn*W-IW^|IUJ6nQNV==er9ZVC$Lp z5QR{aE&S9~ZnlbAlh}M8^#^#Urk`mJZuS-*s!Na^;MFU0Ee!3)hnsf(53eyg&Gr7I zM(@$7?9ixTr1jS%DVD+{9G8uxtR})KEgp`kQv3{#Cn->fme_IqG3JT#<&NOg;gQV1VM^O8SUwuTH&TX?QY~J_mW#?UC|vBJeJgywf=_=N8iOk!j12x9 zg2d)o5(st4#U%F}ODTr)oTEw7a*l`AyJd~rNgT|m@l$UOzWwH}j}QO6CoA-b zJ=p_2BJ7uBNKBOEXAwhK_>^vW^l?Za#cE~d-hu?`6*Ov1qhZlp(0s;ewAw#;RT@nx zWFsw)5j|m~9N#y4E*)2OBbrQ}q&XQ*k6YejsWCN~isHRMqf<%_?MIp)ddoX9qC{nN zWF+eeg+@s-ZN3ib(ptWnyZCtZHp@aWBY&4WUn(w_R&u3>m&+FxO2sSo&3yTbJCzUr zXkS_`e>rb|G+n#3ZWkx)Kix6gfub^bxt#w3DEc9D`^=-D0=cp;-9fcvy5arDCozTAprNWfRt;egE9b=DICjnNXfY0l6Yga03i*OFriM86Df}Q*53Hn1+gzOZb z{rE(Mf}m00VFTLKm8=teVt2PlzwRJF;iD2$FeNhr7)J0;h1NIa!2Ou^H7O0boj}iR$=6}MN$Kl+nOJCJ;ljW(;AP-B$DViQm z@vE-SR_CXkY=ZDZfJ^Ih)ur|)WGs;+uU3&mxD{h&iJ>Q@DBshxk| zT;Hcvx%RD9PHO=ohmGCX%F4C!++V@p^7N!V`5Y`JAMZ5oy*HkwN5gxVehBo*Zt zu{@9`;F3lw82f$L)X+Fv-k&KcY$nO;G*R>nG+yMqJPIHWPsbfXhs%e2b-fq8+#GrN wHpF`=suPKbhu4eRp>0DR82L~av^;2hAbWss2Qapymq2?2K8g`h2MRO!pEvY8E&u=k literal 0 HcmV?d00001 diff --git a/__pycache__/InstallNetFramework.cpython-310.pyc b/__pycache__/InstallNetFramework.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08e379d3ed983c355b1cbf0a3f7e6d9f3945ee16 GIT binary patch literal 5536 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 F{{cLLmJk2{ literal 0 HcmV?d00001 diff --git a/__pycache__/InstallNetFramework.cpython-37.pyc b/__pycache__/InstallNetFramework.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7abd0651d36e008e4847740bcab9d918f31599cb GIT binary patch literal 5504 zcmb_g+jA4w8Q+zB5ymEj05-WQCJk}h)!uJuLL=GIOxg^gNi$H-w4Pm^BO|O^R#Gq; z+7UQ}n+Z+=gn%J-5(r6yp=l;DHje*?KJ-D4iC30i%3B|J>UVY}*#tou+STYgx9@!4 z@BGfU-#JpKqoa+2=imQmiMDT|s2@qA_N;}-6V1poN$+l%r2AWUP^q0XMLx)jng%_n8MT0HMLv+LP#ehAs2yYnS_ASS zv=-#UXdTE$(0Y&?&_%kkfi8@D}_Y&=$>yXw}}o@S2g8 zyznr~V>Kb6zbm!IVTT8N;*h7m3%p2xx3iAdQ(dK8EtP7iIwfIbQ&k@ro}>xS{f}bO z{}^5etJmYNfO3SS}DvC)t_~o3U6^5oJ!-3`RgaVkBM?7!$`71_`1n zOENErQIi!EnKw0+<5WrF3|JE^1 z!KJe@8)S7ks4Kh@V$`6hGEy+2Fri*iVfvIX4D@P!!C;tp-iC9LVTl`vhc&$*LaF!UDUk zZ#(Q4^V^W1$(kx?3{b%U6-+RZc=dHAyzPx;OhSX*xo=EiR$zHHEbxjXg=9wPiwKOQ z_6m&7hx!;r?3EQx5>%bzTucJNq;tH^sdvEy@uD<9boqW+QrHNqvr0r)R51j*qxSKP zr1VNmD8fmME=L5ZR}6>rz95TJ`2irJQ z@v5ll91|3zAS3Az?RunFXMz!3<(J*GgoL> z)Rm|zGZNxRu0SGVU_)axNiz*IDyX7juo`DdA}`4b(lkZECgx-jo0_Td2D~w*$fi(6 zQUqqm6nUA~IIa#KGFdvyzy>*#LQJR)V&c;W1uvjjG^+AEW10%bNCIy#2Ctfoszenr zrXdoZES963Ao3=Xk<7N9RaU8*fmAcmxJbZ?C{>J4a4DqsRv4h zm?7|tteb$Iyy&{539tlFRbpyPG!2Q>bxDmyF)v1Wp66s!(xN7;k&|=@tC|{f(enUb z;zUt|R9}mn2Jru{k;BJiBL+!B1+GBXMvviT8*ctwH2`^x%=BK+Ko|BM6GYNTy*hCc;rh)in*e zI3*V2Sq&g^91kynVo0X0Xq*&9z`CHr0#KFv<(zyQ;XU3`8@UXG(z#qZRr179sfo0s za7TBZCXlP(+Y8@pKZqQ)o1XCGy!&XlslgX+ULgPM%~2Cg$g|H2_Zjc;~1_qKwJT)*-XknOLIFZS3h3${^-(~d3$=qe(#e!!M%9oaC!VIFu@170GAIz7qk~I zAG2pp*e9+o%w8;?`=)&Q`oj0~i)Y`q$1nTIHu&wS>-I-r|B5|zr1I%Oe*if1$7<_Y za`nYqgotT5bBsbFiMpQx|*k$Le!I z6Zl$*sEz;}R;|s9)^+Nb2nov?(?>v~eCDb>c4_g(2lkaSH*Xwvo!z`~1k@IY!k1NZ zbH^9wreJ3(BXdiiOxVTuZ_$4#RQ&gN+G=CTB-E1r%&M!~in`C+daI4L{A)md+#HeF&>EuV1t5;!j$zl#2FQ2|v z?I&sC_a&OoKMoZL{OU?)-nj!|1{CZ|2g(=5A$IOOL;N*hqvaE0i=S1)v@(C8{O-kt znfELEPcF{AM}qL+xAxQpFaa#Np$v8Sz%C`q$BEjaQ5c?YJ-6`1V%G{hi zRozy5^q_ro0(vU*halfTE~x^BnD~C)tyeMU0W-X+mBU}zvon>cskY&Pr9uxIfZv|GaDy|5B_Uf+d2Ie^LhN^6FV3E* z<$!7mgM4a_UvoFJ!7*jE!bEqr3wHK{^7)Sm(W6J~a~CRemzGXWxuKYECq8Zz?azTO zLT15dCH;&QgTt;ZIfUYtpUFV|zEN)}bl&CQEd=g&TT?&rIfq_z!VGX`jYR*_> zY=fhkz$uGl|56(s&KN0_&tj|OBZu#H=Maa#GzM{rj+dI_sZ2gcTo^<*V5`Bc3R-g25c4~*E!2qh=+)R?}cO<YlCCo=V^obTClwaJh;BP=qI5@tPrg( KdL8{NwEhFOVv4i? literal 0 HcmV?d00001 diff --git a/__pycache__/InstallVisualCPlusPlus.cpython-310.pyc b/__pycache__/InstallVisualCPlusPlus.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85b593ef58f272aa104da320a56b5ed104d0a4d7 GIT binary patch literal 4637 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 literal 0 HcmV?d00001 diff --git a/__pycache__/InstallVisualCPlusPlus.cpython-37.pyc b/__pycache__/InstallVisualCPlusPlus.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae271623f91e78e3ea647987d9b0ce12bdde73ac GIT binary patch literal 4594 zcmcgw>vI#=72lO)SqPhlF&I)vZcGy6($z|`B&3wkShAGRDU1gSxbCzbp?i@R>%~5d z(J&o>!^6c4Zh({+JGIF`oJ_z>nwc0s;ybbisVF&Z*^s&<3bMLw5 zp7T5BKF*bb_4RfJp5On&8auU_VSc2I%CiwF@53wk%?yJX%qEy_owD7m);4vUG-~cP zpV>l86Bc5gsKKU5_M~-^?XEq>q%tf+KiG^dxF&AKR$Pm1K-XZqM%UsxTo3JaK-UA^ zfH&d>pqp?b-VAgLZo*rEZo{wPp8?&Dci`87zJU>b6KFHuiQkHw<8|G&zhhFSE{531 z8v5e5$1M0A-13p7+fLTvU45nzv*^LCggsf;XBGcR>haG9S(X91+n~SDC_Axk5)hO1 zRC18TTpv5aN{F_wV;h5c&{S!2mA3dH=y4i)Tn2R;v~7i6=H!Nnjo1V6X@D_aL&itx zfSYW>)N<`0J80@){(!n0Nj+)2&EP$xmNbGjW*c*x88=hu5%!dPj2ZajnYYMh>>p$& zwoEeJO{572C_?euP6i^;G{|;0!8~l$=K(CftB*ZBs>ciLHBk@6QPQMa?gP!@XeZS_ zdJK9seJ0UH)(z6Q)Zz$p-KuXdpMWV<>5RX&UP;740yPp zuiew;Z1)8tk5KTBTwBoX3-h8aqH|@ERd@ZI#%$Y3%6!*;xr$v@hyNN_?*n@5LD*c_K!|VUv=SvTQ2as?M&W z4t#uxI-lnmb;k02Ltnn$A9Lrx@E)B6P~qcY5SF5?K*bF}SK}52b714Z$m&h2qS1nVDcQE1S-;ki1P=dWNeS z%fR)ZPQM=LR|1eTWAk!3Y%y9jT6(mOYw1;!t368-rtPc=$~7y-*!3ie8AyU_4`z4p zax%kXLNY>%Tb}0nX*ydn0mN(|Dhg3|3~>X<iHx!j*!hLAa_++8`BCi- zfd&NFQ~8o=yLJ=6wRfdj1|AWQ@Z%)!ll{bHDc z`30oAg$~OK7SaeZx@ZMWVl5OZqx_a?JwH_(`>Hs6sqkQQX)IU1ckX#Z5jCXg2ekQx z#nO!_;AnOq&kq;>I#K-l&C=W#rMdeGUFC&q=ZiNVf(J?~w7R;wkj}}^=inpcSLfuA4;IJIY~$9yyoWSo$wk2I?+z817tMSD@Rf#t3Pz)b052M z1cG0l{%$EZRJ`&fEVBH}6*|YyEF)B2yj`9g)|U#z6C##h94}9wgSZv%e_oiG(Ywlv zBOnHG&Td*oiE=5db-`!Emn5KWnKD*+!z@UYUk0`%+w`2HJp1-b{9JaPi#9;h`kF}p zqEO9n2&)$Qi$}GI@dz>=xE)sN: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构,跳过配置文件 'main/binary-i386/Packages' 的获取。''' updateThingsString = '''※1、新增新的 Wine 安装器,并支持将安装的 Wine 打包到 Wine 程序 deb 包中 ※2、Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 内,可以不依赖 Wine(一般不推荐把 Wine 打包入内,推荐用依赖的形式),并支持设置自定义依赖和生成模板 -※3、开始初步多语言支持 +※3、开始初步多语言支持 +※4、修复了在没有安装任何 Wine 的情况下使用高级功能导致程序闪退的问题 4、修改错别字(图形话=>图形化) 5、修复评分功能名称为空也可以上传评分的问题 6、去除 toilet 依赖,使在 Deepin 23 Preview 上运行更佳 @@ -1806,6 +1815,10 @@ if len(sys.argv) > 1 and sys.argv[1]: e2.setEditText(sys.argv[1]) if not os.path.exists("/opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"): sparkWineSetting.setEnabled(False) -#ProgramRunStatusShow.ShowWindow() -#ProgramRunStatusUpload.ShowWindow() +if o1.currentText() == "": + # 一个 Wine 都没有却用 Wine 的功能 + # 还是要处理的,至少不会闪退 + wine["没有识别到任何Wine,请在菜单栏“程序”安装Wine或安装任意Wine应用"] = "没有识别到任何Wine,请在菜单栏“程序”安装Wine或安装任意Wine应用" + canUseWine.append("没有识别到任何Wine,请在菜单栏“程序”安装Wine或安装任意Wine应用") + o1.addItem("没有识别到任何Wine,请在菜单栏“程序”安装Wine或安装任意Wine应用") sys.exit(app.exec_()) diff --git a/wine/installwine b/wine/installwine index 469706e..fd1c6da 100644 --- a/wine/installwine +++ b/wine/installwine @@ -2,7 +2,7 @@ # 本来是用C++写的,但在非deepin/UOS编译/运行就是下载不了https文件,只能用python重写 ######################################################################### # 作者:gfdgd xi、为什么您不喜欢熊出没和阿布 -# 版本:2.0.1 +# 版本:2.1.0 # 感谢:感谢 deepin-wine 团队,提供了 deepin-wine 给大家使用,让我能做这个程序 # 基于 Python3 的 PyQt5 构建 #########################################################################