解释器大体完成

This commit is contained in:
gfdgd xi 2022-08-25 21:47:42 +08:00
parent 8afe569b19
commit 3f38af72d9
29 changed files with 933 additions and 324 deletions

View File

@ -1,11 +1,11 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### ###########################################################################################
# 作者gfdgd xi # 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本:1.5.1 # 版本:2.1.0
# 更新时间2022年07月03 # 更新时间2022年08月25
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 感谢:感谢 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("sudo apt install apt-fast -y")
#os.system(f"sudo ss-apt-fast install \"{wine}\" -y") #os.system(f"sudo ss-apt-fast install \"{wine}\" -y")
#return #return
os.system("sudo ss-apt-fast update") #os.system("sudo ss-apt-fast update")
os.system(f"sudo ss-apt-fast install \"{wine}\" -y") 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")
################### ###################
# 程序功能 # 程序功能

View File

@ -1,117 +1,80 @@
#!/usr/bin/env python3
import os import os
import PyQt5.QtCore as QtCore import sys
shell = """# “#”后面代表注释 import json
# 可以为了方便观看改为 bash 的高亮模式 import traceback
# 安装 dll import requests
installdll 0 import PyQt5.QtWidgets as QtWidgets
installdll 1 from UI.AutoConfig import *
# 安装字体
installfont 0 # 后面参数填 Wine 运行器的字体安装器提示的编号
# 安装字体(安装星火应用商店的微软核心字体)
installsparkcorefont
# 安装 Mono
installmono
# 安装 gecko
installgecko
# 安装 vcpp
installvcpp 0 # 后面参数填 Wine 运行器的 VCPP 安装器提示的编号
# 安装 .net
installnet # 后面参数填 Wine 运行器的 VCPP 安装器提示的编号
# 安装 MSXML
installmsxml # 后面参数填 Wine 运行器的 MSXML 安装器提示的编号
#aaaaa
"""
class Command(): urlSources = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/auto"
# 可以被使用的命令 lists = []
commandList = [
"installdll",
"installfont",
"installsparkcorefont",
"installmono",
"installgecko",
"installvcpp",
"installnet",
"installmsxml"
]
def __init__(self, commandString: str) -> None:
self.commandString = commandString
# 解析器 class Connect:
# 命令字符串转可供解析的列表 def SearchBotton_Clicked():
def GetCommandList(self) -> list: nmodel = QtGui.QStandardItemModel(window)
shellList = [] if ui.searchThings.text() == "":
shellFirstShell = self.commandString.split("\n") # 显示全部内容
# 转换成可以执行的数组 for i in lists:
for l in range(0, len(shellFirstShell)): nmodel.appendRow(QtGui.QStandardItem(i[0]))
i = shellFirstShell[l] ui.searchList.setModel(nmodel)
# 判断有没有注释 return
if "#" in i: for i in lists:
# 忽略注释 # 显示筛选的内容
i = i[:i.index("#")] if ui.searchThings.text() in i[0]:
# 删除前后空格 nmodel.appendRow(QtGui.QStandardItem(i[0]))
i = i.strip() ui.searchList.setModel(nmodel)
# 如果是空行
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
# 运行器 def RunBotton_Clicked():
class Run(): # 获取选中项
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string try:
def InstallDll(self) -> int: choose = ui.searchList.selectionModel().selectedIndexes()[0].data()
import InstallDll except:
return InstallDll.Download(self.wineBottonPath, InstallDll.GetNameByNumber(int(self.command[1])), InstallDll.GetUrlByNumber(int(self.command[1]))) QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件")
return
def InstallFont(self) -> int: fileName = ""
pass for i in lists:
print(i)
def InstallMono(self) -> int: if i[0] == choose:
return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' mono") fileName = i[1]
break
def InstallGecko(self) -> int: # 下载脚本
return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' gecko") try:
print(f"{urlSources}/{fileName}")
def InstallVCPP(self) -> int: file = open("/tmp/wine-runner-auto-config.wsh", "w")
pass file.write(requests.get(f"{urlSources}/{fileName}").text)
file.close()
def InstallNet(self) -> int: except:
pass traceback.print_exc()
QtWidgets.QMessageBox.critical(window, "错误", "无法获取配置文件")
def InstallMsxml(self) -> int: return
pass # 执行脚本
process = QtCore.QProcess()
def InstallSparkCoreFont(self): 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"])
pass process.waitForFinished()
# 可以运行的命令的映射关系
# 可以被使用的命令的映射
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)
com = Command(shell)
com.Run(com.GetCommandList(), "/home/gfdgd_xi/.wine", "deepin-wine6-stable") 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_()

361
ConfigLanguareRunner.py Executable file
View File

@ -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])

View File

@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### ###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢 # 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本:1.8.0 # 版本:2.1.0
# 更新时间2022年08月24 # 更新时间2022年08月25
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 构建 # 基于 Python3 构建
########################################################################################### ###########################################################################################
@ -32,12 +32,17 @@ def GetUrlByNumber(dllID: int) -> str:
def GetNameByNumber(dllID: int) -> str: def GetNameByNumber(dllID: int) -> str:
return lists[dllID][0] 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: def Download(wineBotton, dllName, urlPart) -> bool:
try: try:
os.remove(f"{wineBotton}/drive_c/windows/system32/{dllName}") os.remove(f"{wineBotton}/drive_c/windows/system32/{dllName}")
except: except:
pass 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(): def exit():
input("按回车键退出") input("按回车键退出")

View File

@ -1,9 +1,34 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# 使用系统默认的 python3 运行
###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本2.1.0
# 更新时间2022年08月25日
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 构建
###########################################################################################
#################
# 引入所需的库
#################
import os import os
import sys import sys
import json import json
import shutil import shutil
import requests 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 __name__ == "__main__":
if "--help" in sys.argv: if "--help" in sys.argv:
@ -17,8 +42,6 @@ if __name__ == "__main__":
print("XXX 参数一") print("XXX 参数一")
print("参数一为需要安装的容器") print("参数一为需要安装的容器")
sys.exit() sys.exit()
homePath = os.path.expanduser('~')
while True: while True:
os.system("clear") os.system("clear")
print(''' print('''
@ -33,17 +56,7 @@ if __name__ == "__main__":
if not os.path.exists(f"{sys.argv[1]}/drive_c/windows/Fonts"): if not os.path.exists(f"{sys.argv[1]}/drive_c/windows/Fonts"):
input("您选择的不是 Wine 容器,无法继续,按回车键退出") input("您选择的不是 Wine 容器,无法继续,按回车键退出")
exit() 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)): for i in range(0, len(fontList)):
print(f"{i} {fontList[i][3]}") print(f"{i} {fontList[i][3]}")
while True: while True:

View File

@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### ###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢 # 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本:1.8.0 # 版本:2.1.0
# 更新时间2022年08月06 # 更新时间2022年08月25
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 构建 # 基于 Python3 构建
########################################################################################### ###########################################################################################
@ -65,7 +65,7 @@ except:
file = open(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt", "r") file = open(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt", "r")
version = file.read().replace("\n", "") version = file.read().replace("\n", "")
print("安装版本:", version) 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: if exitInputShow:
input("安装结束,按回车键退出") input("安装结束,按回车键退出")
exit() exit()
@ -98,7 +98,7 @@ if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.m
print("缓存版本:", version.replace("/", "")) print("缓存版本:", version.replace("/", ""))
print("已经缓存,使用本地版本") print("已经缓存,使用本地版本")
file.close() 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: if exitInputShow:
input("安装结束,按回车键退出") input("安装结束,按回车键退出")
exit() 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("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}\"") os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}\" -o install.msi \"{programDownloadUrl}\"")
print("开始安装") 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: try:
if sys.argv[4] == "1": if sys.argv[4] == "1":
print("写入缓存") print("写入缓存")

View File

@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### ###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢 # 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本:1.8.0 # 版本:2.1.0
# 更新时间2022年08月06 # 更新时间2022年08月25
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 构建 # 基于 Python3 构建
########################################################################################### ###########################################################################################
@ -14,29 +14,6 @@ import os
import sys import sys
import json import json
import requests 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: try:
msxmlList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/msxml/list.json").text) msxmlList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/msxml/list.json").text)
except: except:
@ -45,39 +22,68 @@ except:
["MSXML 4.0 SP3", "https://www.gitlink.org.cn/api/attachments/390678?gfdgd_xi", "msxml4.0SP3.msi"], ["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"] ["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)): def Download(wineBotton: str, id: int, wine: str):
print(f"{i}{msxmlList[i][0]}") os.system(f"aria2c -x 16 -s 16 -d \"/tmp/deepin-wine-runner-msxml/\" -o \"{msxmlList[id][2]}\" \"{msxmlList[id][1]}\"")
while True: os.system(f"WINEPREFIX='{wineBotton}' '{wine}' msiexec /i \"/tmp/deepin-wine-runner-msxml/{msxmlList[id][2]}\"")
try:
choose = input("请输入要选择要安装的 MSXML输入“exit”退出") if __name__ == "__main__":
if choose.lower() == "exit": 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 break
choose = int(choose) try:
if choose.lower() == "exit":
exit()
except: except:
print("输入错误,请重新输入") pass
continue print(f"您选择了 {msxmlList[choose][0]}")
if 0 <= choose and choose < len(msxmlList): if len(sys.argv) <= 3:
break choice = True
try: else:
if choose.lower() == "exit": 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() exit()
except: print("开始下载")
pass os.system(f"rm -rfv \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"")
print(f"您选择了 {msxmlList[choose][0]}") os.system(f"mkdir -p \"{homePath}/.config/deepin-wine-runner/MSXML/\"")
if len(sys.argv) <= 3: os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.config/deepin-wine-runner/MSXML\" -o \"{msxmlList[choose][2]}\" \"{msxmlList[choose][1]}\"")
choice = True print("开始安装")
else: os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"")
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("安装结束,按回车键退出") 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("安装结束,按回车键退出")

View File

@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### ###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢 # 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本:1.8.0 # 版本:2.1.0
# 更新时间2022年08月01 # 更新时间2022年08月25
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 构建 # 基于 Python3 构建
########################################################################################### ###########################################################################################
@ -14,29 +14,6 @@ import os
import sys import sys
import json import json
import requests 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: try:
netList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/net/list.json").text) netList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/net/list.json").text)
except: 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.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"] ["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": def Download(wineBotton: str, id: int, wine: str):
exit() programName = os.path.split(netList[id][1])[1]
if len(sys.argv) <= 3: os.system(f"aria2c -x 16 -s 16 -d \"/tmp/deepin-wine-runner-net\" -o \"{programName}\" \"{netList[id][1]}\"")
choice = True os.system(f"WINEPREFIX='{wineBotton}' '{wine}' '/tmp/deepin-wine-runner-net/{programName}'")
else:
choice = (sys.argv[3] == "1") if __name__ == "__main__":
print(f"您选择了 .net framework {netList[choose][0]}") if "--help" in sys.argv:
print(f"如果是 Offline Installer 版本,提示需要连接互联网,其实是不需要的,断网也可以安装") print("作者gfdgd xi、为什么您不喜欢熊出没和阿布呢")
print(f"如果 Offline Installer 版本连接网络时安装失败,提示无法连接服务器或连接超时,可以尝试下载完安装包加载过程中断网以便断网安装") print("版本1.0.0")
print(f"一般建议 Offline Installer 版本在下载完 exe 安装程序后在加载过程中断网以便提高安装速度") print("本程序可以更方便的在 wine 容器中安装 .net framework")
programName = os.path.split(netList[choose][1])[1] sys.exit()
if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/.netframework/{programName}") and choice: if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "":
print("已经缓存,使用本地版本") print("您未指定需要安装 .net framework 的容器和使用的 wine无法继续")
os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'") 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("安装结束,按回车键退出") 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("安装结束,按回车键退出")

View File

@ -1,4 +1,15 @@
#!/bin/bash #!/bin/bash
# 使用系统默认的 bash 运行
###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本2.1.0
# 更新时间2022年08月25日
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 构建
###########################################################################################
#################
# 引入所需的库
#################
echo echo
echo 'm m " m m mmmm ' echo 'm m " m m mmmm '
echo '# # # mmm m mm mmm # # m" "m' echo '# # # mmm m mm mmm # # m" "m'
@ -60,6 +71,10 @@ which ss-apt-fast > /dev/null
if [ $? == 0 ]; then if [ $? == 0 ]; then
apt="ss-apt-fast" apt="ss-apt-fast"
fi fi
which aptss > /dev/null
if [ $? == 0 ]; then
apt="aptss"
fi
# 添加源 # 添加源
if [ $system = "0" ]; then if [ $system = "0" ]; then
${debianSource[$systemVersion]} ${debianSource[$systemVersion]}

View File

@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### ###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢 # 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本:1.8.0 # 版本:2.1.0
# 更新时间2022年08月01 # 更新时间2022年08月25
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 构建 # 基于 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: if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}") and choice:
print("已经缓存,使用本地版本") print("已经缓存,使用本地版本")
if msxmlList[choose][2] == "msi": 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("安装结束,按回车键退出") input("安装结束,按回车键退出")
sys.exit() sys.exit()
if msxmlList[choose][2] == "exe": 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("安装结束,按回车键退出") input("安装结束,按回车键退出")
sys.exit() sys.exit()
print("开始下载") print("开始下载")
@ -79,12 +79,12 @@ os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/other'")
if msxmlList[choose][2] == "msi": 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]}\"") os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/other' -o '{msxmlList[choose][3]}' \"{msxmlList[choose][1]}\"")
print("开始安装") 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("安装结束") print("安装结束")
sys.exit() sys.exit()
if msxmlList[choose][2] == "exe": 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]}\"") os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/other' -o '{msxmlList[choose][3]}' \"{msxmlList[choose][1]}\"")
print("开始安装") 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("安装结束,按回车键退出") input("安装结束,按回车键退出")
sys.exit() sys.exit()

View File

@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### ###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢 # 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本:1.8.0 # 版本:2.1.0
# 更新时间2022年08月01 # 更新时间2022年08月25
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 构建 # 基于 Python3 构建
########################################################################################### ###########################################################################################
@ -14,21 +14,46 @@ import os
import sys import sys
import json import json
import requests 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: if __name__ == "__main__":
print("作者gfdgd xi、为什么您不喜欢熊出没和阿布呢") if "--help" in sys.argv:
print("版本1.0.0") print("作者gfdgd xi、为什么您不喜欢熊出没和阿布呢")
print("本程序可以更方便的在 wine 容器中安装 Visual Studio C++") print("版本1.0.0")
sys.exit() print("本程序可以更方便的在 wine 容器中安装 Visual Studio C++")
if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "": sys.exit()
print("您未指定需要安装 Visual Studio C++ 的容器和使用的 wine无法继续") if len(sys.argv) <= 2 or sys.argv[1] == "" or sys.argv[2] == "":
print("参数:") print("您未指定需要安装 Visual Studio C++ 的容器和使用的 wine无法继续")
print("XXX 参数一 参数二 参数三(可略)") print("参数:")
print("参数一为需要安装的容器参数二为需要使用的wine参数三为是否缓存可略三个参数位置不能颠倒") print("XXX 参数一 参数二 参数三(可略)")
sys.exit() print("参数一为需要安装的容器参数二为需要使用的wine参数三为是否缓存可略三个参数位置不能颠倒")
sys.exit()
homePath = os.path.expanduser('~') homePath = os.path.expanduser('~')
print(''' print('''
m m mmm m m mmm
"m m" m" " m m "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) print("请选择以下的 Visual Studio C++ 进行安装(不保证能正常安装运行)")
except: for i in range(0, len(netList)):
netList = [ print(f"{i} Visual Studio C++ {netList[i][0]}")
["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"], while True:
["2008 (VC++ 9.0) SP1 (不再支持) ", "https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe", "vcredist08_x86.exe"], try:
["2010 (VC++ 10.0) SP1 (不再支持) ", "https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe", "vcredist10_x86.exe"], choose = input("请输入要选择的 Visual Studio C++ 版本输入“exit”退出").lower()
["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"], if choose == "exit":
["2013 (VC++ 12.0) ", "https://download.visualstudio.microsoft.com/download/pr/10912113/5da66ddebb0ad32ebd4b922fd82e8e25/vcredist_x86.exe", "vcredist13_x86.exe"], break
["2015、2017、2019 和 2022", "https://aka.ms/vs/17/release/vc_redist.x86.exe", "vcredist15_x86.exe"] choose = int(choose)
] except:
print("请选择以下的 Visual Studio C++ 进行安装(不保证能正常安装运行)") print("输入错误,请重新输入")
for i in range(0, len(netList)): continue
print(f"{i} Visual Studio C++ {netList[i][0]}") if 0 <= choose and choose < len(netList):
while True:
try:
choose = input("请输入要选择的 Visual Studio C++ 版本输入“exit”退出").lower()
if choose == "exit":
break break
choose = int(choose) if choose == "exit":
except: exit()
print("输入错误,请重新输入") print(f"您选择了 Visual Studio C++ {netList[choose][0]}")
continue if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}"):
if 0 <= choose and choose < len(netList): print("已经缓存,使用本地版本")
break os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'")
if choose == "exit": input("安装结束,按回车键退出")
exit() exit()
print(f"您选择了 Visual Studio C++ {netList[choose][0]}") print("开始下载")
if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}"): os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'")
print("已经缓存,使用本地版本") os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/vcpp'")
os.system(f"WINEPREFIX={sys.argv[1]} {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'") 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("安装结束,按回车键退出") 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("安装结束,按回车键退出")

View File

@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### ###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢 # 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本:1.8.0 # 版本:2.1.0
# 更新时间2022年08月02日 # 更新时间2022年08月25
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序 # 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 构建 # 基于 Python3 构建
########################################################################################### ###########################################################################################

85
UI/AutoConfig.py Normal file
View File

@ -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", "打开本地部署脚本"))

119
UI/AutoConfig.ui Normal file
View File

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>自动部署脚本</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="searchTips">
<property name="text">
<string>搜索内容(为空代表显示所有内容):</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="searchThings"/>
</item>
<item>
<widget class="QPushButton" name="saerchBotton">
<property name="text">
<string>搜索</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QListView" name="searchList"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="runBotton">
<property name="text">
<string>部署此方案</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>36</height>
</rect>
</property>
<widget class="QMenu" name="menu_2">
<property name="title">
<string>帮助</string>
</property>
<addaction name="help"/>
<addaction name="separator"/>
<addaction name="about"/>
</widget>
<widget class="QMenu" name="menu">
<property name="title">
<string>程序</string>
</property>
<addaction name="openFile"/>
<addaction name="separator"/>
<addaction name="exitProgram"/>
</widget>
<addaction name="menu"/>
<addaction name="menu_2"/>
</widget>
<action name="about">
<property name="text">
<string>关于</string>
</property>
</action>
<action name="exitProgram">
<property name="text">
<string>退出程序</string>
</property>
</action>
<action name="help">
<property name="text">
<string>帮助</string>
</property>
</action>
<action name="openFile">
<property name="text">
<string>打开本地部署脚本</string>
</property>
</action>
</widget>
<resources/>
<connections/>
</ui>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -13,7 +13,7 @@
"感谢 @PossibleVing 提供的新版应用图标", "感谢 @PossibleVing 提供的新版应用图标",
"感谢 @zhengjl 反馈的 1.7.0 中 .net framrwork 3.5 非离线版安装包的问题以及 1.8.0 重复路径一直自动重复增加的问题", "感谢 @zhengjl 反馈的 1.7.0 中 .net framrwork 3.5 非离线版安装包的问题以及 1.8.0 重复路径一直自动重复增加的问题",
"感谢 @国川 @刘岐 提供的非 i386、amd64 运行 wine 使用 i386/amd64 可执行文件的教程和脚本", "感谢 @国川 @刘岐 提供的非 i386、amd64 运行 wine 使用 i386/amd64 可执行文件的教程和脚本",
"感谢 @勇往直前 梦想启航 @189******09 @tfhyl 提供在非 X86 平台的国产 PC 进行测试", "感谢 @王俊文 @189******09 @tfhyl 提供在非 X86 平台的国产 PC 进行测试",
"感谢 @cuisirwork 提供的提供视频教程的建议", "感谢 @cuisirwork 提供的提供视频教程的建议",
"感谢 @办公助手 提供的非 X86 平台 Wine 运行自定义 exe 应用教程和 deb 包", "感谢 @办公助手 提供的非 X86 平台 Wine 运行自定义 exe 应用教程和 deb 包",
"感谢 @季星火 反馈的无法使用该程序删除生成的 .desktop 的问题", "感谢 @季星火 反馈的无法使用该程序删除生成的 .desktop 的问题",

View File

@ -653,7 +653,15 @@ def ThankWindow():
about_this_program() about_this_program()
def InstallWineFont(): def InstallWineFont():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'echo 这些字体来自星火应用商店 && sudo ss-apt-fast install ms-core-fonts winfonts -y' --keep-open"]).start() # 筛选 apt
if not os.system("which aptss"):
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'echo 这些字体来自星火应用商店 && sudo aptss install ms-core-fonts -y' --keep-open"]).start()
elif not os.system("which ss-apt-fast"):
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'echo 这些字体来自星火应用商店 && sudo ss-apt-fast update && sudo ss-apt-fast install ms-core-fonts -y' --keep-open"]).start()
elif not os.system("which apt-fast"):
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'echo 这些字体来自星火应用商店 && sudo apt-fast install ms-core-fonts -y' --keep-open"]).start()
else:
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'echo 这些字体来自星火应用商店 && sudo apt install ms-core-fonts -y' --keep-open"]).start()
def WineRunnerBugUpload(): def WineRunnerBugUpload():
threading.Thread(target=os.system, args=[f"'{programPath}/deepin-wine-runner-update-bug'"]).start() threading.Thread(target=os.system, args=[f"'{programPath}/deepin-wine-runner-update-bug'"]).start()
@ -1346,7 +1354,8 @@ exe路径\' 参数 \'
<code>N: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构跳过配置文件 'main/binary-i386/Packages' 的获取</code>''' <code>N: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构跳过配置文件 'main/binary-i386/Packages' 的获取</code>'''
updateThingsString = '''<b>※1、新增新的 Wine 安装器,并支持将安装的 Wine 打包到 Wine 程序 deb 包中 updateThingsString = '''<b>※1、新增新的 Wine 安装器,并支持将安装的 Wine 打包到 Wine 程序 deb 包中
2Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 可以不依赖 Wine一般不推荐把 Wine 打包入内推荐用依赖的形式并支持设置自定义依赖和生成模板 2Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 可以不依赖 Wine一般不推荐把 Wine 打包入内推荐用依赖的形式并支持设置自定义依赖和生成模板
3开始初步多语言支持</b> 3开始初步多语言支持
4修复了在没有安装任何 Wine 的情况下使用高级功能导致程序闪退的问题</b>
4修改错别字图形话=>图形化 4修改错别字图形话=>图形化
5修复评分功能名称为空也可以上传评分的问题 5修复评分功能名称为空也可以上传评分的问题
6去除 toilet 依赖使在 Deepin 23 Preview 上运行更佳 6去除 toilet 依赖使在 Deepin 23 Preview 上运行更佳
@ -1806,6 +1815,10 @@ if len(sys.argv) > 1 and sys.argv[1]:
e2.setEditText(sys.argv[1]) e2.setEditText(sys.argv[1])
if not os.path.exists("/opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"): if not os.path.exists("/opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"):
sparkWineSetting.setEnabled(False) sparkWineSetting.setEnabled(False)
#ProgramRunStatusShow.ShowWindow() if o1.currentText() == "":
#ProgramRunStatusUpload.ShowWindow() # 一个 Wine 都没有却用 Wine 的功能
# 还是要处理的,至少不会闪退
wine["没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用"] = "没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用"
canUseWine.append("没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用")
o1.addItem("没有识别到任何Wine请在菜单栏“程序”安装Wine或安装任意Wine应用")
sys.exit(app.exec_()) sys.exit(app.exec_())

View File

@ -2,7 +2,7 @@
# 本来是用C++写的但在非deepin/UOS编译/运行就是下载不了https文件只能用python重写 # 本来是用C++写的但在非deepin/UOS编译/运行就是下载不了https文件只能用python重写
######################################################################### #########################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布 # 作者gfdgd xi、为什么您不喜欢熊出没和阿布
# 版本2.0.1 # 版本2.1.0
# 感谢:感谢 deepin-wine 团队,提供了 deepin-wine 给大家使用,让我能做这个程序 # 感谢:感谢 deepin-wine 团队,提供了 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 的 PyQt5 构建 # 基于 Python3 的 PyQt5 构建
######################################################################### #########################################################################