From 8149ea0e8de0b54455776a271680da7fe896655b Mon Sep 17 00:00:00 2001 From: gfdgd_xi <3025613752@qq.com> Date: Fri, 26 Aug 2022 14:41:08 +0800 Subject: [PATCH] =?UTF-8?q?2.1.0=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AutoConfig.py | 11 + Makefile | 10 +- README.md | 25 +- deb/DEBIAN/control | 37 +- deb/DEBIAN/postinst | 3 +- deb/opt/apps/deepin-wine-runner/AllInstall.py | 20 +- deb/opt/apps/deepin-wine-runner/AutoConfig.py | 118 +++++ .../ConfigLanguareRunner.py | 439 ++++++++++++++++++ deb/opt/apps/deepin-wine-runner/InstallDll.py | 127 +++++ .../apps/deepin-wine-runner/InstallFont.py | 38 +- .../apps/deepin-wine-runner/InstallMono.py | 27 +- .../apps/deepin-wine-runner/InstallMsxml.py | 117 ++--- .../deepin-wine-runner/InstallNetFramework.py | 139 +++--- .../deepin-wine-runner/InstallNewWineHQ.sh | 15 + .../apps/deepin-wine-runner/InstallOther.py | 25 +- .../InstallVisualCPlusPlus.py | 120 +++-- .../InstallWineOnDeepin23.py | 4 +- .../deepin-wine-runner/LANG/InstallDll.py | 127 +++++ .../apps/deepin-wine-runner/UI/AutoConfig.py | 76 +++ .../deepin-wine-runner/deepin-wine-runner | 91 +++- deb/opt/apps/deepin-wine-runner/dxvk.7z | Bin 3150826 -> 3150883 bytes .../apps/deepin-wine-runner/information.json | 2 +- .../deepin-wine-runner/package-script.zip | Bin 300045 -> 300045 bytes .../apps/deepin-wine-runner/wine/.qmake.stash | 24 + .../apps/deepin-wine-runner/wine}/Makefile | 0 .../apps/deepin-wine-runner/wine/installwine | 2 +- .../deepin-wine-runner/wine}/installwine.out | Bin .../deepin-wine-runner/wine/winelist.json | 2 +- mainwindow.py | 2 +- package-script.zip | Bin 300045 -> 300045 bytes 30 files changed, 1351 insertions(+), 250 deletions(-) create mode 100755 deb/opt/apps/deepin-wine-runner/AutoConfig.py create mode 100755 deb/opt/apps/deepin-wine-runner/ConfigLanguareRunner.py create mode 100755 deb/opt/apps/deepin-wine-runner/InstallDll.py create mode 100755 deb/opt/apps/deepin-wine-runner/LANG/InstallDll.py create mode 100644 deb/opt/apps/deepin-wine-runner/UI/AutoConfig.py create mode 100644 deb/opt/apps/deepin-wine-runner/wine/.qmake.stash rename {wine => deb/opt/apps/deepin-wine-runner/wine}/Makefile (100%) rename {wine => deb/opt/apps/deepin-wine-runner/wine}/installwine.out (100%) diff --git a/AutoConfig.py b/AutoConfig.py index f16cafb..87909ea 100755 --- a/AutoConfig.py +++ b/AutoConfig.py @@ -1,4 +1,15 @@ #!/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 diff --git a/Makefile b/Makefile index 8817a67..d62679a 100755 --- a/Makefile +++ b/Makefile @@ -8,12 +8,9 @@ build: cp -rv VM-source/Windows7X64Auto.iso VM cp -rv VM-source/Windows7X86Auto.iso VM cp -rv VM-source/run.py VM - cp -rv wine/installwine deb/opt/apps/deepin-wine-runner/wine + cp -rv wine/ deb/opt/apps/deepin-wine-runner/ zip -v -q -r package-script.zip package-script cp -rv VM deb/opt/apps/deepin-wine-runner - mkdir -p deb/opt/apps/deepin-wine-runner/wine - cp -rv wine/installwine deb/opt/apps/deepin-wine-runner/wine - echo "[]" > deb/opt/apps/deepin-wine-runner/wine/winelist.json cp -rv AllInstall.py deb/opt/apps/deepin-wine-runner cp -rv BeCyIconGrabber.exe deb/opt/apps/deepin-wine-runner cp -rv deepin-wine-packager-with-script.py deb/opt/apps/deepin-wine-runner @@ -54,6 +51,11 @@ build: cp -rv Icon deb/opt/apps/deepin-wine-runner cp -rv gtkGetFileNameDlg deb/opt/apps/deepin-wine-runner cp -rv LANG/*.qm deb/opt/apps/deepin-wine-runner/LANG + cp -rv InstallDll.py deb/opt/apps/deepin-wine-runner/LANG + cp -rv ConfigLanguareRunner.py deb/opt/apps/deepin-wine-runner + cp -rv AutoConfig.py deb/opt/apps/deepin-wine-runner + cp -rv UI/*.py deb/opt/apps/deepin-wine-runner/UI + cp -rv InstallDll.py deb/opt/apps/deepin-wine-runner dpkg -b deb spark-deepin-wine-runner.deb diff --git a/README.md b/README.md index 4534df6..a9770fa 100755 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

-

Wine 运行器

+

Wine 运行器 2.1.0


## 介绍 @@ -11,7 +11,7 @@ env WINEPREFIX=容器路径 wine(wine的路径) 可执行文件路径 是使用 Python3 的 tkinter 构建的 (自己美术功底太差,图标只能在网络上找了) (测试平台:deepin 20.6;UOS 家庭版 21.3.1;Ubuntu 22.04) -![image.png](https://storage.deepin.org/thread/202208131811324016_image.png) +![截图_选择区域_20220826143213.png](https://storage.deepin.org/thread/202208261437088825_截图_选择区域_20220826143213.png) 而打包器可以方便的把您的 wine 容器打包成 deb 包供他人使用,程序创建的 deb 构建临时文件夹目录树如下: ```bash /XXX @@ -85,6 +85,27 @@ desktop文件中StartupWMClass字段。用于让桌面组件将窗口类名与de ![image.png](https://storage.deepin.org/thread/202207190822204627_image.png) ## 更新日志 +### 2.1.0(2022年08月26日) +**※1、新增新的 Wine 安装器,并支持将安装的 Wine 打包到 Wine 程序 deb 包中** +**※2、Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 内,可以不依赖 Wine(一般不推荐把 Wine 打包入内,推荐用依赖的形式),并支持设置自定义依赖和生成模板** +**※3、开始初步多语言支持** +**※4、修复了在没有安装任何 Wine 的情况下使用高级功能导致程序闪退的问题** +**※5、支持云端自动获取数据配置 Wine 容器** +**※6、支持手动导入配置文件自动配置 Wine 容器** +**※7、新增从云端下载 Dll 的功能** +**※8、修复了 Dll 提取工具不会在 winecfg 中添加原装的问题** +9、修改错别字(图形话=>图形化) +10、修复评分功能名称为空也可以上传评分的问题 +11、去除 toilet 依赖,使在 Deepin 23 Preview 上运行更佳 +12、支持删除所有由 Wine 创建的启动器快捷方式 +![截图_选择区域_20220826143213.png](https://storage.deepin.org/thread/202208261437088825_截图_选择区域_20220826143213.png) + +### 2.0.0-2(2022年08月16日) +修复了在 deepin 23 安装缺少`toilet`依赖导致无法安装的问题,更多更新内容请见 2.0.0 + +### 2.0.0-1(2022年08月15日) +修复了缺失`python3-psutil`依赖的问题,更多更新内容请见 2.0.0 + ### 2.0.0(2022年08月13日) **※1、修复了重复路径一直自动重复增加的问题** **※2、修复了两个打包器打包错误的问题(非基于生态活动脚本的为 wine 导入错误,基于生态活动脚本的为架构有误导致打包出的 deb 无法打包)** diff --git a/deb/DEBIAN/control b/deb/DEBIAN/control index 9ded81b..6a87fa2 100755 --- a/deb/DEBIAN/control +++ b/deb/DEBIAN/control @@ -1,29 +1,26 @@ Package: spark-deepin-wine-runner -Version: 2.0.0-2 +Version: 2.1.0 Maintainer: gfdgd xi <3025613752@qq.com>, 为什么您不喜欢熊出没和阿布呢 Homepage: https://gitee.com/gfdgd-xi/deep-wine-runner Architecture: all Priority: optional Depends: python3, python3-pil, python3-pil.imagetk, python3-pyquery, deepin-terminal, aria2, curl, unrar, unzip, python3-requests, fakeroot, bash, python3-pyqt5, python3-psutil -Conflicts: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer -Replaces: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer -Installed-Size: 23500 +Conflicts: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52 +Replaces: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52 +Installed-Size: 24928 Description: gfdgd xi、为什么您不喜欢熊出没和阿布呢 制作的 wine 运行器 更新内容: - ※1、修复了重复路径一直自动重复增加的问题 - ※2、修复了两个打包器打包错误的问题(非基于生态活动脚本的为 wine 导入错误,基于生态活动脚本的为架构有误导致打包出的 deb 无法打包) - ※3、适配了部分非 i386、amd64 架构计算机的 UOS 系统使用的 wine 并支持打包非 i386、amd64 架构计算机的 UOS 系统使用的 wine 程序 deb 包 - ※4、支持安装 dxvk(遵守 Zlib 开源协议) - ※5、运行器、打包器(包括非基于生态适配活动脚本制作的)支持使用 Wine 生态适配活动的容器清理脚本 - ※6、支持更加简易的安装最新版的 WineHQ - ※7、增加字体商店 - ※8、新增查看可执行文件运行情况的功能 - 9、支持不显示没有安装的 Wine,方便用户识别 - 10、修改了 Wine 的顺序使其更加合理 - 11、支持删除安装 exe 后在启动器的快捷方式 - 12、优化了 Wine 打包器(非基于生态活动脚本)对容器的处理 - 13、修复了 Wine 打包器(非基于生态活动脚本)打包出的 deb 安装时显示为解压缩后会消耗 0 B 的额外空间以及 postrm 的一些问题 - 14、支持删除无需使用的程序组件 - 15、支持组件/运行库下载后缓存方便下次使用(可以清理) - 16、点击获取图标按钮后会自动读取 exe 框的程序图标(不支持相对路径和包内路径,只支持绝对路径) + ※1、新增新的 Wine 安装器,并支持将安装的 Wine 打包到 Wine 程序 deb 包中 + ※2、Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 内,可以不依赖 Wine(一般不推荐把 Wine 打包入内,推荐用依赖的形式),并支持设置自定义依赖和生成模板 + ※3、开始初步多语言支持 + ※4、修复了在没有安装任何 Wine 的情况下使用高级功能导致程序闪退的问题 + ※5、支持云端自动获取数据配置 Wine 容器 + ※6、支持手动导入配置文件自动配置 Wine 容器 + ※7、新增从云端下载 Dll 的功能 + ※8、修复了 Dll 提取工具不会在 winecfg 中添加原装的问题 + 9、修改错别字(图形话=>图形化) + 10、修复评分功能名称为空也可以上传评分的问题 + 11、去除 toilet 依赖,使在 Deepin 23 Preview 上运行更佳 + 12、支持删除所有由 Wine 创建的启动器快捷方式 + 更新时间:2022年08月26日 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢 diff --git a/deb/DEBIAN/postinst b/deb/DEBIAN/postinst index e9563dc..40e8b8f 100755 --- a/deb/DEBIAN/postinst +++ b/deb/DEBIAN/postinst @@ -10,6 +10,7 @@ if [ `arch` != "x86_64" ]; then rm -rf /usr/share/applications/spark-deepin-wine-runner-start-vm.desktop # 删除安装 wine 功能 rm -rf "/opt/apps/deepin-wine-runner/wine install" + rm -rf "/opt/apps/deepin-wine-runner/wine" rm -rf /usr/bin/deepin-wine-runner-wine-installer rm -rf /usr/bin/deepin-wine-runner-wine-install-deepin23 rm -rf /usr/bin/deepin-wine-runner-wine-install @@ -22,4 +23,4 @@ fi # 设置目录权限,让用户可读可写,方便后续删除组件 chmod 777 -R /opt/apps/deepin-wine-runner # 向服务器返回安装数加1(不显示内容且忽略错误) -curl http://120.25.153.144/spark-deepin-wine-runner/Install.php?Version=2.0.0-1 -s > /dev/null | true +curl http://120.25.153.144/spark-deepin-wine-runner/Install.php?Version=2.1.0 -s > /dev/null | true diff --git a/deb/opt/apps/deepin-wine-runner/AllInstall.py b/deb/opt/apps/deepin-wine-runner/AllInstall.py index 3748f37..ad61ad8 100755 --- a/deb/opt/apps/deepin-wine-runner/AllInstall.py +++ b/deb/opt/apps/deepin-wine-runner/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/deb/opt/apps/deepin-wine-runner/AutoConfig.py b/deb/opt/apps/deepin-wine-runner/AutoConfig.py new file mode 100755 index 0000000..87909ea --- /dev/null +++ b/deb/opt/apps/deepin-wine-runner/AutoConfig.py @@ -0,0 +1,118 @@ +#!/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 traceback +import requests +import PyQt5.QtWidgets as QtWidgets +from UI.AutoConfig import * + +urlSources = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/auto" +lists = [] + +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) + + 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", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", "/tmp/wine-runner-auto-config.wsh", "--system"]) + process.waitForFinished() + + def OpenFile_Triggered(): + path = QtWidgets.QFileDialog.getOpenFileName(window, "提示", homePath, "配置文件(*.sh *.wsh);;全部文件(*.*)") + if path[0] == "": + return + # 执行脚本 + process = QtCore.QProcess() + process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", path[0], "--system"]) + process.waitForFinished() + +# 读取文本文档 +def readtxt(path): + f = open(path, "r") # 设置文件对象 + str = f.read() # 获取内容 + f.close() # 关闭文本对象 + return str # 返回结果 + +if __name__ == "__main__": + homePath = os.path.expanduser('~') + programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string + information = json.loads(readtxt(f"{programPath}/information.json")) + version = information["Version"] + wine = "deepin-wine6-stable" + wineprefix = f"{homePath}/.wine" + try: + wine = sys.argv[1] + wineprefix = sys.argv[2] + except: + pass + app = QtWidgets.QApplication(sys.argv) + window = QtWidgets.QMainWindow() + ui = Ui_MainWindow() + ui.setupUi(window) + window.setWindowTitle(f"Wine 运行器 {version}——容器自动配置部署脚本") + window.show() + # 连接信号和槽 + ui.saerchBotton.clicked.connect(Connect.SearchBotton_Clicked) + ui.runBotton.clicked.connect(Connect.RunBotton_Clicked) + ui.openFile.triggered.connect(Connect.OpenFile_Triggered) + ui.exitProgram.triggered.connect(window.close) + # 解析云列表 + 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/deb/opt/apps/deepin-wine-runner/ConfigLanguareRunner.py b/deb/opt/apps/deepin-wine-runner/ConfigLanguareRunner.py new file mode 100755 index 0000000..a6611ab --- /dev/null +++ b/deb/opt/apps/deepin-wine-runner/ConfigLanguareRunner.py @@ -0,0 +1,439 @@ +#!/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 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)", + "($MAKER)", + "($COPYRIGHT)", + "($?)" +] + +class Command(): + # 有风险的命令 + dangerCommand = [ + "bash", + "bat", + "download", + "reg" + ] + # 可以被使用的命令 + commandList = [ + "installdll", + "installfont", + "installsparkcorefont", + "installmono", + "installgecko", + "installvcpp", + "installnet", + "installmsxml", + "echo", + "info", + "error", + "warning", + "exit", + "bash", + "bat", + "version", + "thank", + "pause", + "download", + "installdxvk", + "createbotton", + "reg", + "enabledopengl", + "disbledopengl", + "winecfg", + "winver", + "changeversion", + "stopdll" + ] + + 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])), self.wine) + return InstallDll.Download(self.wineBottonPath, self.command[1], InstallDll.GetUrlByName(self.command[1]), self.wine) + + def InstallDxvk(self): + if not os.path.exists(f"{programPath}/dxvk"): + if os.system(f"7z x \"{programPath}/dxvk.7z\" -o\"{programPath}\""): + print("错误:无法解压资源") + return 1 + os.remove(f"{programPath}/dxvk.7z") + return os.system(f"env 'WINE={self.wine}' 'WINE64={self.wine}' 'WINEPREFIX={self.wineBottonPath}' bash '{programPath}/dxvk/auto.sh' install") + + 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 StopDll(self) -> int: + os.system(f"WINEPREFIX='{self.wineBottonPath}' '{self.wine}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(self.command[1])[0]} /f") + + def CreateBotton(self): + self.command = ["bat", "exit"] + self.Bat() + 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) -> int: + 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) + + def Reg(self) -> int: + self.command = ["bat", "regedit", "/s", self.command[1]] + return self.Bat() + + def EnabledOpenGl(self) -> int: + self.command = ["reg", f"z:{programPath}/EnabledOpengl.reg"] + return self.Reg() + + def DisbledOpenGl(self) -> int: + self.command = ["reg", f"z:{programPath}/DisabledOpengl.reg"] + return self.Reg() + + def Winver(self): + self.command = ["bat", "winver"] + return self.Bat() + + def Winecfg(self): + self.command = ["bat", "winecfg"] + return self.Bat() + + def ChangeVersion(self): + # 判断是否为正确的版本 + if not os.path.exists(f"{programPath}/ChangeWineBottonVersion/{self.command[1]}.reg"): + print("错误:您选择的版本错误,目前只支持以下版本") + for i in os.listdir(f"{programPath}/ChangeWineBottonVersion"): + print(i.replace(".reg", ""), end=" ") + print() + return 1 + self.command = ["reg", f"z:/{programPath}/ChangeWineBottonVersion/{self.command[1]}.reg"] + return self.Reg() + + # 可以运行的命令的映射关系 + # 可以被使用的命令的映射 + 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, + "installdxvk": InstallDxvk, + "createbotton": CreateBotton, + "reg": Reg, + "enabledopengl": EnabledOpenGl, + "disbledopengl": DisbledOpenGl, + "winecfg": Winecfg, + "winver": Winver, + "changeversion": ChangeVersion, + "stopdll": StopDll + } + + # 参数数列表 + 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], + "installdxvk": [0], + "createbotton": [0], + "reg": [1], + "enabledopengl": [0], + "disbledopengl": [0], + "winecfg": [0], + "winver": [0], + "changeversion": [1], + "stopdll": [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("参数不足") + programEnv[9][1] = "-3" + 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/deb/opt/apps/deepin-wine-runner/InstallDll.py b/deb/opt/apps/deepin-wine-runner/InstallDll.py new file mode 100755 index 0000000..b299773 --- /dev/null +++ b/deb/opt/apps/deepin-wine-runner/InstallDll.py @@ -0,0 +1,127 @@ +#!/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 traceback +import requests +# 获取云列表 +url = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/dlls" +print("获取列表中……", end="") +try: + lists = json.loads(requests.get(f"{url}/list.json").text) +except: + print("\r列表获取失败!") + exit() +print("\r列表获取成功!") + +def GetUrlByNumber(dllID: int) -> str: + dllName = lists[dllID][0] + return f"{url}/{lists[int(dllID)][1]}/{lists[int(dllID)][2]}/{lists[int(dllID)][0]}" + +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, wine: str) -> bool: + try: + os.remove(f"{wineBotton}/drive_c/windows/system32/{dllName}") + except: + pass + os.system(f"aria2c -x 16 -s 16 -d '{wineBotton}/drive_c/windows/system32' -o '{dllName}' '{urlPart}'") + os.system(f"WINEPREFIX='{wineBotton}' '{wine}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(dllName)[0]} /d native /f") + return 0 + +def exit(): + input("按回车键退出") + sys.exit() + +if __name__ == "__main__": + if "--help" in sys.argv: + print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢") + print("版本:1.0.0") + print("本程序可以更方便的在 wine 容器中安装指定应用") + sys.exit() + if len(sys.argv) <= 1 or sys.argv[1] == "": + print("您未指定需要安装的容器,无法继续") + print("参数:") + print("XXX 参数一") + print("参数一为需要安装的容器") + sys.exit() + print(''' + mmmm ""# ""# + # "m # # + # # # # + # # # # + #mmm" "mm "mm + + +''') + wineBotton = sys.argv[1] + wine = sys.argv[2] + if not os.path.exists(f"{wineBotton}/drive_c/windows/Fonts"): + input("您选择的不是 Wine 容器") + exit() + # 判断是不是 wine 容器 + if not os.path.exists(f"{wineBotton}/drive_c/windows/system32"): + print("这不是 Wine 容器") + exit() + # 获取用户希望安装的DLL + + while True: + print() + print("您可以输入DLL名称进行搜索,输入前面编号或DLL全称即可安装(推荐是编号,可以选系统版本)") + print("输入exit即可退出") + urlPart = "" + while True: + dllName = input(">") + if dllName.lower() == "exit": + exit() + if dllName in lists: + url = dllName + break + try: + dllName = lists[int(dllName)][0] + urlPart = GetUrlByNumber(int(dllName)) + f"{url}/{lists[int(dllName)][1]}/{lists[int(dllName)][2]}/{lists[int(dllName)][0]}" + break + except: + pass + right = False + for i in range(0, len(lists)): + if dllName == lists[i][0]: + right = True + urlPart = f"{url}/{lists[i][1]}/{lists[i][2]}/{lists[i][0]}" + break + if dllName in lists[i][0]: + print(i, lists[i][0], f"平台:{lists[i][1]}", f"架构:{lists[i][2]}") + if right: + break + if os.path.exists(f"{wineBotton}/drive_c/windows/system32/{dllName}"): + if input(f"{dllName} 已存在,是否覆盖?(一般不推荐)[Y/N]").upper() == "N": + continue + try: + os.remove(f"{wineBotton}/drive_c/windows/system32/{dllName}") + except: + print("文件移除失败!") + traceback.print_exc() + continue + # 下载 DLL + print(f"正在下载{dllName},请稍后") + print(f"下载链接:{urlPart}") + if Download(wineBotton, dllName, urlPart, wine): + print("下载失败!请重试") diff --git a/deb/opt/apps/deepin-wine-runner/InstallFont.py b/deb/opt/apps/deepin-wine-runner/InstallFont.py index 14eaa92..bb94430 100755 --- a/deb/opt/apps/deepin-wine-runner/InstallFont.py +++ b/deb/opt/apps/deepin-wine-runner/InstallFont.py @@ -1,7 +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: @@ -15,8 +42,6 @@ if __name__ == "__main__": print("XXX 参数一") print("参数一为需要安装的容器") sys.exit() - - homePath = os.path.expanduser('~') while True: os.system("clear") print(''' @@ -31,14 +56,7 @@ if __name__ == "__main__": if not os.path.exists(f"{sys.argv[1]}/drive_c/windows/Fonts"): input("您选择的不是 Wine 容器,无法继续,按回车键退出") exit() - 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/deb/opt/apps/deepin-wine-runner/InstallMono.py b/deb/opt/apps/deepin-wine-runner/InstallMono.py index d9ecef2..fd9feb7 100755 --- a/deb/opt/apps/deepin-wine-runner/InstallMono.py +++ b/deb/opt/apps/deepin-wine-runner/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 构建 ########################################################################################### @@ -12,6 +12,7 @@ ################# import os import sys +import traceback import pyquery if "--help" in sys.argv: @@ -47,6 +48,10 @@ else: ''') homePath = os.path.expanduser('~') +try: + exitInputShow = int(os.getenv("ENTERNOTSHOW")) +except: + exitInputShow = True try: # 获取最新版本的版本号 programVersionList = pyquery.PyQuery(url=f"http://mirrors.ustc.edu.cn/wine/wine/wine-{sys.argv[3]}/") @@ -54,13 +59,15 @@ except: print("无法连接下载服务器,将使用本地缓存") if not os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi") or not os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt"): print("无本地缓存数据,无法进行、结束") - input("按回车键退出") + if exitInputShow: + input("按回车键退出") exit() 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\"") - input("安装结束,按回车键退出") + 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() programVersion = programVersionList("a:last-child").attr.href # 获取最新版本安装包的URL @@ -91,8 +98,9 @@ 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\"") - input("安装结束,按回车键退出") + 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() file = open(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt", "w+") @@ -101,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("写入缓存") @@ -114,4 +122,5 @@ except: print("写入缓存") file.write(programVersion) file.close() -input("安装结束,按回车键退出") \ No newline at end of file +if exitInputShow: + input("安装结束,按回车键退出") \ No newline at end of file diff --git a/deb/opt/apps/deepin-wine-runner/InstallMsxml.py b/deb/opt/apps/deepin-wine-runner/InstallMsxml.py index 3638856..49998d1 100755 --- a/deb/opt/apps/deepin-wine-runner/InstallMsxml.py +++ b/deb/opt/apps/deepin-wine-runner/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 构建 ########################################################################################### @@ -12,21 +12,36 @@ ################# import os import sys +import json +import requests +try: + msxmlList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/msxml/list.json").text) +except: + msxmlList = [ + ["MSXML 4.0 SP2", "https://www.gitlink.org.cn/api/attachments/390679?gfdgd_xi", "msxml6.0.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"] + ] -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() +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]}\"") -homePath = os.path.expanduser('~') -print(''' +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 ## # ## # # @@ -35,44 +50,40 @@ print(''' ''') -msxmlList = [ - ["MSXML 4.0 SP2", "https://www.gitlink.org.cn/api/attachments/390679?gfdgd_xi", "msxml6.0.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"] -] -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": + + 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/deb/opt/apps/deepin-wine-runner/InstallNetFramework.py b/deb/opt/apps/deepin-wine-runner/InstallNetFramework.py index ba98873..8a29b65 100755 --- a/deb/opt/apps/deepin-wine-runner/InstallNetFramework.py +++ b/deb/opt/apps/deepin-wine-runner/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 构建 ########################################################################################### @@ -12,21 +12,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/net/list.json").text) +except: + netList = [ + ["3.5 SP1 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/b635098a-2d1d-4142-bef6-d237545123cb/2651b87007440a15209cac29634a4e45/dotnetfx35.exe"], + ["4.0 Offline Installer", "https://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe"], + ["4.5 Web Installer", "https://download.microsoft.com/download/B/A/4/BA4A7E71-2906-4B2D-A0E1-80CF16844F5F/dotNetFx45_Full_setup.exe"], + ["4.5.1 Offline Installer", "https://download.microsoft.com/download/1/6/7/167F0D79-9317-48AE-AEDB-17120579F8E2/NDP451-KB2858728-x86-x64-AllOS-ENU.exe"], + ["4.5.2 Offline Installer", "https://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe"], + ["4.6 Offline Installer", "https://download.microsoft.com/download/6/F/9/6F9673B1-87D1-46C4-BF04-95F24C3EB9DA/enu_netfx/NDP46-KB3045557-x86-x64-AllOS-ENU_exe/NDP46-KB3045557-x86-x64-AllOS-ENU.exe"], + ["4.6.1 Offline Installer", "https://download.microsoft.com/download/E/4/1/E4173890-A24A-4936-9FC9-AF930FE3FA40/NDP461-KB3102436-x86-x64-AllOS-ENU.exe"], + ["4.6.2 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/8e396c75-4d0d-41d3-aea8-848babc2736a/80b431456d8866ebe053eb8b81a168b3/ndp462-kb3151800-x86-x64-allos-enu.exe"], + ["4.7 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/2dfcc711-bb60-421a-a17b-76c63f8d1907/e5c0231bd5d51fffe65f8ed7516de46a/ndp47-kb3186497-x86-x64-allos-enu.exe"], + ["4.7.1 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/4312fa21-59b0-4451-9482-a1376f7f3ba4/9947fce13c11105b48cba170494e787f/ndp471-kb4033342-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"] + ] -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() +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}'") -homePath = os.path.expanduser('~') -print(''' +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 # @@ -35,54 +60,40 @@ print(''' ''') -netList = [ - ["3.5 SP1 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/b635098a-2d1d-4142-bef6-d237545123cb/2651b87007440a15209cac29634a4e45/dotnetfx35.exe"], - ["4.0 Offline Installer", "https://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe"], - ["4.5 Web Installer", "https://download.microsoft.com/download/B/A/4/BA4A7E71-2906-4B2D-A0E1-80CF16844F5F/dotNetFx45_Full_setup.exe"], - ["4.5.1 Offline Installer", "https://download.microsoft.com/download/1/6/7/167F0D79-9317-48AE-AEDB-17120579F8E2/NDP451-KB2858728-x86-x64-AllOS-ENU.exe"], - ["4.5.2 Offline Installer", "https://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe"], - ["4.6 Offline Installer", "https://download.microsoft.com/download/6/F/9/6F9673B1-87D1-46C4-BF04-95F24C3EB9DA/enu_netfx/NDP46-KB3045557-x86-x64-AllOS-ENU_exe/NDP46-KB3045557-x86-x64-AllOS-ENU.exe"], - ["4.6.1 Offline Installer", "https://download.microsoft.com/download/E/4/1/E4173890-A24A-4936-9FC9-AF930FE3FA40/NDP461-KB3102436-x86-x64-AllOS-ENU.exe"], - ["4.6.2 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/8e396c75-4d0d-41d3-aea8-848babc2736a/80b431456d8866ebe053eb8b81a168b3/ndp462-kb3151800-x86-x64-allos-enu.exe"], - ["4.7 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/2dfcc711-bb60-421a-a17b-76c63f8d1907/e5c0231bd5d51fffe65f8ed7516de46a/ndp47-kb3186497-x86-x64-allos-enu.exe"], - ["4.7.1 Offline Installer", "https://download.visualstudio.microsoft.com/download/pr/4312fa21-59b0-4451-9482-a1376f7f3ba4/9947fce13c11105b48cba170494e787f/ndp471-kb4033342-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"] -] -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": + 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 - 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 + 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/deb/opt/apps/deepin-wine-runner/InstallNewWineHQ.sh b/deb/opt/apps/deepin-wine-runner/InstallNewWineHQ.sh index 8347126..7c2a986 100755 --- a/deb/opt/apps/deepin-wine-runner/InstallNewWineHQ.sh +++ b/deb/opt/apps/deepin-wine-runner/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/deb/opt/apps/deepin-wine-runner/InstallOther.py b/deb/opt/apps/deepin-wine-runner/InstallOther.py index a330f1f..79840f2 100755 --- a/deb/opt/apps/deepin-wine-runner/InstallOther.py +++ b/deb/opt/apps/deepin-wine-runner/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 构建 ########################################################################################### @@ -12,6 +12,8 @@ ################# import os import sys +import json +import requests if "--help" in sys.argv: print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢") @@ -35,10 +37,13 @@ print(''' ''') -msxmlList = [ - ["Windows Script 5.7 for Windows XP", "https://download.microsoft.com/download/f/f/e/ffea3abf-b55f-4924-b5a5-bde0805ad67c/scripten.exe", "exe", "scripten.exe"], - ["Windows Management Instrumentation 1.50.1131", "https://www.gitlink.org.cn/api/attachments/390680", "exe", "WMITools.exe"] -] +try: + msxmlList = json.loads(requests.get("https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/other/list.json").text) +except: + msxmlList = [ + ["Windows Script 5.7 for Windows XP", "https://download.microsoft.com/download/f/f/e/ffea3abf-b55f-4924-b5a5-bde0805ad67c/scripten.exe", "exe", "scripten.exe"], + ["Windows Management Instrumentation 1.50.1131", "https://www.gitlink.org.cn/api/attachments/390680", "exe", "WMITools.exe"] + ] print("请选择以下的应用进行安装(不保证能正常安装运行)") for i in range(0, len(msxmlList)): print(f"{i}、{msxmlList[i][0]}") @@ -61,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("开始下载") @@ -74,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/deb/opt/apps/deepin-wine-runner/InstallVisualCPlusPlus.py b/deb/opt/apps/deepin-wine-runner/InstallVisualCPlusPlus.py index 4877a11..ace14b6 100755 --- a/deb/opt/apps/deepin-wine-runner/InstallVisualCPlusPlus.py +++ b/deb/opt/apps/deepin-wine-runner/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 构建 ########################################################################################### @@ -12,21 +12,48 @@ ################# 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 # # # # # @@ -35,39 +62,32 @@ print(''' ''') -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/deb/opt/apps/deepin-wine-runner/InstallWineOnDeepin23.py b/deb/opt/apps/deepin-wine-runner/InstallWineOnDeepin23.py index 2f81807..fb77be1 100755 --- a/deb/opt/apps/deepin-wine-runner/InstallWineOnDeepin23.py +++ b/deb/opt/apps/deepin-wine-runner/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/deb/opt/apps/deepin-wine-runner/LANG/InstallDll.py b/deb/opt/apps/deepin-wine-runner/LANG/InstallDll.py new file mode 100755 index 0000000..b299773 --- /dev/null +++ b/deb/opt/apps/deepin-wine-runner/LANG/InstallDll.py @@ -0,0 +1,127 @@ +#!/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 traceback +import requests +# 获取云列表 +url = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/dlls" +print("获取列表中……", end="") +try: + lists = json.loads(requests.get(f"{url}/list.json").text) +except: + print("\r列表获取失败!") + exit() +print("\r列表获取成功!") + +def GetUrlByNumber(dllID: int) -> str: + dllName = lists[dllID][0] + return f"{url}/{lists[int(dllID)][1]}/{lists[int(dllID)][2]}/{lists[int(dllID)][0]}" + +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, wine: str) -> bool: + try: + os.remove(f"{wineBotton}/drive_c/windows/system32/{dllName}") + except: + pass + os.system(f"aria2c -x 16 -s 16 -d '{wineBotton}/drive_c/windows/system32' -o '{dllName}' '{urlPart}'") + os.system(f"WINEPREFIX='{wineBotton}' '{wine}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(dllName)[0]} /d native /f") + return 0 + +def exit(): + input("按回车键退出") + sys.exit() + +if __name__ == "__main__": + if "--help" in sys.argv: + print("作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢") + print("版本:1.0.0") + print("本程序可以更方便的在 wine 容器中安装指定应用") + sys.exit() + if len(sys.argv) <= 1 or sys.argv[1] == "": + print("您未指定需要安装的容器,无法继续") + print("参数:") + print("XXX 参数一") + print("参数一为需要安装的容器") + sys.exit() + print(''' + mmmm ""# ""# + # "m # # + # # # # + # # # # + #mmm" "mm "mm + + +''') + wineBotton = sys.argv[1] + wine = sys.argv[2] + if not os.path.exists(f"{wineBotton}/drive_c/windows/Fonts"): + input("您选择的不是 Wine 容器") + exit() + # 判断是不是 wine 容器 + if not os.path.exists(f"{wineBotton}/drive_c/windows/system32"): + print("这不是 Wine 容器") + exit() + # 获取用户希望安装的DLL + + while True: + print() + print("您可以输入DLL名称进行搜索,输入前面编号或DLL全称即可安装(推荐是编号,可以选系统版本)") + print("输入exit即可退出") + urlPart = "" + while True: + dllName = input(">") + if dllName.lower() == "exit": + exit() + if dllName in lists: + url = dllName + break + try: + dllName = lists[int(dllName)][0] + urlPart = GetUrlByNumber(int(dllName)) + f"{url}/{lists[int(dllName)][1]}/{lists[int(dllName)][2]}/{lists[int(dllName)][0]}" + break + except: + pass + right = False + for i in range(0, len(lists)): + if dllName == lists[i][0]: + right = True + urlPart = f"{url}/{lists[i][1]}/{lists[i][2]}/{lists[i][0]}" + break + if dllName in lists[i][0]: + print(i, lists[i][0], f"平台:{lists[i][1]}", f"架构:{lists[i][2]}") + if right: + break + if os.path.exists(f"{wineBotton}/drive_c/windows/system32/{dllName}"): + if input(f"{dllName} 已存在,是否覆盖?(一般不推荐)[Y/N]").upper() == "N": + continue + try: + os.remove(f"{wineBotton}/drive_c/windows/system32/{dllName}") + except: + print("文件移除失败!") + traceback.print_exc() + continue + # 下载 DLL + print(f"正在下载{dllName},请稍后") + print(f"下载链接:{urlPart}") + if Download(wineBotton, dllName, urlPart, wine): + print("下载失败!请重试") diff --git a/deb/opt/apps/deepin-wine-runner/UI/AutoConfig.py b/deb/opt/apps/deepin-wine-runner/UI/AutoConfig.py new file mode 100644 index 0000000..1418666 --- /dev/null +++ b/deb/opt/apps/deepin-wine-runner/UI/AutoConfig.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'AutoConfig.ui' +# +# Created by: PyQt5 UI code generator 5.11.3 +# +# WARNING! All changes made in this file will be lost! + +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 = 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.addAction(self.openFile) + self.menu.addSeparator() + self.menu.addAction(self.exitProgram) + self.menubar.addAction(self.menu.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.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/deb/opt/apps/deepin-wine-runner/deepin-wine-runner b/deb/opt/apps/deepin-wine-runner/deepin-wine-runner index e9297d2..86d680b 100755 --- a/deb/opt/apps/deepin-wine-runner/deepin-wine-runner +++ b/deb/opt/apps/deepin-wine-runner/deepin-wine-runner @@ -26,8 +26,6 @@ import urllib.parse as parse import PyQt5.QtGui as QtGui import PyQt5.QtCore as QtCore import PyQt5.QtWidgets as QtWidgets -# 方便一些,单独把 tr 抽出来 -from PyQt5.QtCore import QObject ################### # 程序所需事件 ################### @@ -122,6 +120,7 @@ def DisableButton(things): e1.setDisabled(things) e2.setDisabled(things) o1.setDisabled(things) + miniAppStore.setDisabled(things) #winetricksOpen.configure(state=a[things]) getProgramIcon.setDisabled(things) uninstallProgram.setDisabled(things) @@ -516,6 +515,20 @@ def FontAppStore(): wineBottonPath = e1.currentText() os.system(f"WINE='{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallFont.py' '{wineBottonPath}' {int(setting['RuntimeCache'])}") +def GetDllFromInternet(): + if e1.currentText() == "": + wineBottonPath = setting["DefultBotton"] + else: + wineBottonPath = e1.currentText() + os.system(f"WINE='{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallDll.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") + +def WineBottonAutoConfig(): + if e1.currentText() == "": + wineBottonPath = setting["DefultBotton"] + else: + wineBottonPath = e1.currentText() + os.system(f"'{programPath}/AutoConfig.py' '{wine[o1.currentText()]}' '{wineBottonPath}'") + def InstallMonoGecko(program): if e1.currentText() == "": wineBottonPath = setting["DefultBotton"] @@ -556,7 +569,7 @@ def InstallDXVK(): wineBottonPath = e1.currentText() process = QtCore.QProcess() process.startDetached(f"{programPath}/launch.sh", ["deepin-terminal", "-e", - "env", f"WINE={wine[o1.currentText()]}", f"WINE64={wine[o1.currentText()]}", f"WINEPREFIX={wineBottonPath}", + "env", f"WINE={wine[o1.currentText()]}", f"WINE64={wine[o1.currentText()]}", f"WINEPREFIX={wineBottonPath}", "bash", f"{programPath}/dxvk/setup_dxvk.sh", "install"]) def UninstallDXVK(): @@ -647,7 +660,15 @@ def ThankWindow(): about_this_program() 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(): threading.Thread(target=os.system, args=[f"'{programPath}/deepin-wine-runner-update-bug'"]).start() @@ -932,6 +953,7 @@ class GetDllFromWindowsISO: return try: shutil.copy(f"/tmp/wine-runner-getdll/i386/{choose[:-1]}_", f"{GetDllFromWindowsISO.wineBottonPath}/drive_c/windows/system32/{choose}") + os.system(f"WINEPREFIX='{GetDllFromWindowsISO.wineBottonPath}' '{wine[o1.currentText()]}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(choose)[0]} /d native /f") QtWidgets.QMessageBox.information(GetDllFromWindowsISO.message, "提示", "提取成功!") except: traceback.print_exc() @@ -1340,15 +1362,20 @@ exe路径\' 参数 \' N: 鉴于仓库 '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、开始初步多语言支持 -4、修改错别字(图形话=>图形化) -5、修复评分功能名称为空也可以上传评分的问题 -6、去除 toilet 依赖,使在 Deepin 23 Preview 上运行更佳 -7、支持删除所有由 Wine 创建的启动器快捷方式 +※3、开始初步多语言支持 +※4、修复了在没有安装任何 Wine 的情况下使用高级功能导致程序闪退的问题 +※5、支持云端自动获取数据配置 Wine 容器 +※6、支持手动导入配置文件自动配置 Wine 容器 +※7、新增从云端下载 Dll 的功能 +※8、修复了 Dll 提取工具不会在 winecfg 中添加原装的问题 +9、修改错别字(图形话=>图形化) +10、修复评分功能名称为空也可以上传评分的问题 +11、去除 toilet 依赖,使在 Deepin 23 Preview 上运行更佳 +12、支持删除所有由 Wine 创建的启动器快捷方式 ''' for i in information["Thank"]: thankText += f"{i}\n" -updateTime = "2022年08月22日" +updateTime = "2022年08月26日" about = f'''

关于

一个能让Linux用户更加方便运行Windows应用的程序,内置了对wine图形化的支持和各种Wine工具和自制Wine程序打包器、运行库安装工具等等

同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具,可以做到只需要用户下载系统镜像并点击安装即可,无需顾及虚拟机安装、创建、虚拟机的分区等等

@@ -1494,6 +1521,9 @@ programManager.addWidget(button_r_6, 3, 4, 1, 1) sparkWineSetting = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "星火wine配置")) sparkWineSetting.clicked.connect(lambda: threading.Thread(target=os.system, args=["/opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"]).start()) programManager.addWidget(sparkWineSetting, 3, 6, 1, 1) +wineAutoConfig = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "自动/手动配置 Wine 容器")) +wineAutoConfig.clicked.connect(WineBottonAutoConfig) +programManager.addWidget(wineAutoConfig, 3, 8, 1, 1) # 权重 button5.setSizePolicy(size) saveDesktopFileOnLauncher.setSizePolicy(size) @@ -1575,6 +1605,7 @@ w4 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "删除选择的 W cleanBottonUOS = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "清理 Wine 容器(基于 Wine 适配活动脚本)")) w5 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "打包 wine 应用")) w6 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "使用官方 Wine 适配活动的脚本进行打包")) +getDllOnInternet = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "从互联网获取DLL")) w7 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "从镜像获取DLL(只支持Windows XP、Windows Server 2003官方安装镜像)")) updateGeek = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "从 Geek Uninstaller 官网升级程序")) deleteDesktopIcon = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "删除所有 Wine 程序在启动器的快捷方式")) @@ -1587,6 +1618,7 @@ wineOption.addSeparator() wineOption.addAction(w5) wineOption.addAction(w6) wineOption.addSeparator() +wineOption.addAction(getDllOnInternet) wineOption.addAction(w7) wineOption.addSeparator() wineOption.addAction(updateGeek) @@ -1652,6 +1684,7 @@ w4.triggered.connect(DeleteWineBotton) cleanBottonUOS.triggered.connect(CleanWineBottonByUOS) w5.triggered.connect(BuildExeDeb) w6.triggered.connect(UOSPackageScript) +getDllOnInternet.triggered.connect(GetDllFromInternet) w7.triggered.connect(GetDllFromWindowsISO.ShowWindow) updateGeek.triggered.connect(lambda: os.system(f"'{programPath}/launch.sh' deepin-terminal -C '\"{programPath}/UpdateGeek.sh\"' --keep-open")) w8.triggered.connect(SetDeepinFileDialogDeepin) @@ -1695,7 +1728,7 @@ s2.triggered.connect(lambda: webbrowser.open_new_tab("https://s.threatbook.cn/") s3.triggered.connect(lambda: webbrowser.open_new_tab("https://www.virustotal.com/")) help = menu.addMenu(QtCore.QCoreApplication.translate("U", "帮助(&H)")) -h1 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "程序官网")) +h1 = help.addMenu(QtCore.QCoreApplication.translate("U", "程序官网")) h2 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "小提示")) h3 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "更新内容")) h4 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "谢明名单")) @@ -1703,12 +1736,29 @@ h5 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "更新这个程 h6 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "反馈这个程序的建议和问题")) h7 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "关于这个程序")) h8 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "关于 Qt")) -help.addAction(h1) +gfdgdxiio = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "作者个人站")) +gitee = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "Gitee")) +github = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "Github")) +gitlink = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "Gitlink")) +gitlab = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "Gitlab")) +jihu = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "极狐")) +h1.addAction(gfdgdxiio) +h1.addAction(gitee) +h1.addAction(github) +h1.addAction(gitlink) +h1.addAction(gitlab) +h1.addAction(jihu) help.addSeparator() help.addAction(h2) help.addAction(h3) help.addAction(h4) help.addSeparator() +videoHelp = help.addMenu(QtCore.QCoreApplication.translate("U", "视频教程")) +easyHelp = QtWidgets.QAction("简易使用教程") +buildHelp = QtWidgets.QAction("打包教程") +videoHelp.addAction(easyHelp) +videoHelp.addAction(buildHelp) +help.addSeparator() help.addAction(h5) help.addAction(h6) help.addAction(h7) @@ -1717,10 +1767,17 @@ help.addSeparator() hm1 = help.addMenu(QtCore.QCoreApplication.translate("U", "更多生态适配应用")) hm1_1 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "运行 Android 应用:UEngine 运行器")) hm1.addAction(hm1_1) -h1.triggered.connect(OpenProgramURL) +gfdgdxiio.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io")) +gitee.triggered.connect(lambda: webbrowser.open_new_tab("https://gitee.com/gfdgd-xi/deep-wine-runner")) +github.triggered.connect(lambda: webbrowser.open_new_tab("https://github.com/gfdgd-xi/deep-wine-runner")) +gitlink.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlink.org.cn/gfdgd_xi/deep-wine-runner")) +gitlab.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlab.com/gfdgd-xi/deep-wine-runner")) +jihu.triggered.connect(lambda: webbrowser.open_new_tab("https://jihulab.com//gfdgd-xi/deep-wine-runner")) h2.triggered.connect(helps) h3.triggered.connect(UpdateThings) h4.triggered.connect(ThankWindow) +easyHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://www.bilibili.com/video/BV1ma411972Y")) +buildHelp.triggered.connect(lambda: webbrowser.open_new_tab("https://www.bilibili.com/video/BV1EU4y1k7zr")) h5.triggered.connect(UpdateWindow.ShowWindow) h6.triggered.connect(WineRunnerBugUpload) h7.triggered.connect(about_this_program) @@ -1772,6 +1829,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/deb/opt/apps/deepin-wine-runner/dxvk.7z b/deb/opt/apps/deepin-wine-runner/dxvk.7z index 8c022edc7cadb5ea79e424674cf15e0f2dee8776..b1f483792bf899981139bb21f1ad94b6ac8238f8 100644 GIT binary patch delta 2450 zcmW;Bc|6mP1IO`=F(D$!eU7=0=Dx)y3%Lp9D)*6N!e}C5PFo2+tpGsGNkN;6FxYc8!1B@IW)F^in#eVcYaNdHV9#QAJ9O0 z=FNuM>nQdfOOx3Tqwlc0W@0{beuO*scxM-WGWtrZ!S@wKYzibc@y?P`8ze@!!&xmE zbFzdep^G7oZavqWa0^wPHk;`^&6bPa%wk5E3(+`D9n&(~u;P#`vU>mb!^ z^?^&O)r*(>qV$-27rxd_D*7+KqK>X_BH&Boaaq}BJY(j)V{|G&QSR`Jg zxM$G&TRM21u7o1P`0Ert@-s%ng6SP5ulmai639`+DLdB6U{gxvs??S|;aT3gjbA zOM)u6J8yDkWknOI-1Q1$>1q^kcOW*`JkY*h=G$J`t$eo))AU&taRLM6ZK&+yipjG$ zL7_Nh+i$^1mF=d|i7$0wD zs~Sx*dvnA=KL3`tu4SewU)R!_%6DvebvuP`7b8sU3AAe6BMym5rwJasFz#FrWrq21 z$MetTFk#m-Nc)k2XN+1|n~vf|9Ou$;dm#P*oDjKV8|k2C&1JSEEJEC1t%=xHj5Zsb z)GB7?Jeq9pnQ8hYyl+$;IO*{j;-Pi6RKV#MmJB=NrLO(1!3YIp%J!6fR(Gv!vt6hW>brxJcq}-t&~QuUgbVGLZlgdL#cqlAY z>3LP#-3R*ybh5=9#WaMzwJkuA)(@CSo8h)BDmKW@X3^_8C@3tK8etJ)7P1~&TlHS8 zQdnG!-f!bO*sXlSM3sy9I~I$YqI`;BK)}BfPBl7CQHd3AyYO2!xS}dJ;$~Ewmjt6J z#bG>nCgP8J%KC6|i7R@(KvYR+k+PIFzkgtoLhF<)xsdeI8bS1z`VvN0()=>rIE&Q2 zJ#Nu!&v|mfaBt$H{hQ?Upq7M$2a&Ej=iROrxiy;Y{4gxO#`Nf-zQ^tru`3o7Z0`De zG7IM5Sl(Jql@n6qfn&c#id9Hj@+gh$sfZ4=n;(fJ<&SYULs`l`d>Rtgt88V>Q0|8# zzBD~kX^7sV8OGn?=CB(-H>}O$;~{4)o$vXMaHlaFDOadHwNdRvWw|{LF;SBG^A=YZ zMze}#kMdI#y_-;%Rju-_kgMS^W&x)YDdQ<=dX1|r_{dW04KB4hc4ts^NG;^R&RzNg zHbRE+DZ_)AbD1#4LDVW{wXH7ZG@F=l7_qD_4ZFr>G+r4UrQu;4D9*BCb&PDPRU>a{ zSwQJ{wHrKE)9L1-jrQ>uhYWAyX=9~_aO<;J29~LOt zLMa)j?>65L#`Oh4nD^oeFs;23F%q#cyId9^lpGhTI?tv1h}1G-81rf4(RdlIsh1UMhq250eEg^3iUxW$0Wj)s z4F1{29b-F^PPetBA@USRaBriOlKhH8k6zSmnq=}GH%X=8z543iTpCtX%(hlG?47U= zvA@xD8>0K5yd&+K!ci+j`|juurwrkg$-dKGQ)XN0>(*rp14FATRgiFWaJDb!WrME7 zT&13Ye3wkDL$@M>=Y^!A8~mw*guWK^i@kX%>#A~+2q6-BVnqt}`9o_V`@{;z@uG@J!|IhEI;m`4~k9O>9Yw|mazQ6GO$ zKK{7b_ye7so^bg=WhCoQaVjbWF97{%dC!YosV3Q1x3!@8`u%rli2-1ZKP&C&I^1Ch zY4gcpMrCc=jw4S?v@+@uk%_BstSdW-Dxe}etZa!neDg@I<-xGBvu0r+*wua#t3MMK5@iRw?@?uK26GE7-0hl|~G zd!>myUnn|e#Z#)77<5^P_es2Glqqz~AM~4&sj)EufdyJZt~lMd)jOEF z#UW^ufS!(|WR=`l90j{pRs4Z(%^i^^>-y||W2Qi$^UO=x+$!KxcdbBBHZTY*$p{8B VT?3r~f!LGYvx2|n)X_np{{aLme{cW* delta 2393 zcmW;Bc|6mP1IO{nF=lR>doyP4D{@R!b5`VBO3Hn%zOK;0mbF!c=x|>RBXbWKUq?+s z+!&@y?Xju>!7~QxJ%^*iXwsb}E$^#Xpwm0sfT27rTK9=_&j<)K)liCP>pfV#P zP`$uTs8#g1u@tE|^90K43mN`wEj^rhmrYA@hAbZjLPR$qLe1yExYo zjv7e~Cgs;Wp-AzTRbz7X`4vzXWQQ=rk&<|@AhShDRF27)hlxeF;7^JxGtH8X_YF?f z4XoCy=%q~QdXL_jy?A4>Gj-WD&9Yj}JE}R08nskwLSHoewAwNJvLk})KK3yQd^_wr zOZk(@yOjP&`-107Y}`@gq*rpC_eVd1$F0QgjIrhT6ozR@xVC^C-mUIMz&KOZ<5~=M zA6%ZL>@?0ZrJXl(k;p(h{jS!&@9{+dPv~B z?|7UX1lL33SEIW=A=_^l*|MxHAP`~lud=9nng;PJp9ZOvXTeNZh-`wV7GWqC8bKbk z*0zi_0y(`$7KYWUcTcycU=7of+?e@9%gSGJT&05*FfN(c9TQ*eR=%FS$KmlJXOsr+ zcGzJDTRylSUFOfd0(IGhbZQ$U48%l##$Gy`d+6xj8_L~}H03ER_+(aa)$z@bbFIsc zWrXu|>E6Izj0%nYMTp*QLXelZUEeig+y&p+HvFxIiHq2MT=hGAW*lzsZ90$JU$7g# zQIli7G#Owq=Hk$=vL!o_?>F-yoBraO&Q|=#S4nadg_qt9FG>1AIe!l+^CdHN)fHIt zU3M5VJIVO*VIK+B(MkDLyApcyAjl@t=}}M=LlQ$x`X%!XRlY}`Bk19VXgbG*clTmE z)uD$?l!LH!K~Q3t)d5wy zute~BP^q82*}l}!Mp;*`isX5&QI^K36s=GEb8fkLQ_cpn_R92fzEIohSpV%)2gp~K z-P~gp&SSXSxy7VI2{DB0k)x|!PxH|7?!}rhX^IZhjP%?@KPA4i@0%9B zcZWJMnN}&DYbAgVdN%1TapJt951lcwae7AHVduQXUsyll&vPJef?n(T(mjC{^`VQH`q6%~vNIeR71M2CbSj;|!b@lsOT~6r+wo!isGa`F<)kX}_D2i#b z6Yth2jh=Lr2=u)0kga#8NdH@VRg(B3RWf^v^O;_Be5F~Bv~j#Jb*cr{ZQWe?C{e5Z zV68=p;IU=*`>O}tkC9#y<6kC|E56RDd)76ai+l>*rec;N#mAF@Tq)?yvk>ij-XeiR zmCGcJ;QUsR@9zH7SUVqkZx1K=>yIhRD{}wCUD=cuPWYQs%i6Ek#^3Ay97V~B6>d}f zLT6ou#Ap4IiOad|&)!`+co#&lH;!wyj{EXw4T=@BfI16YmH%L!RZWTj-;V%u0FD4S z0bBrX01x25#tYyBKmhyzC_n%p2oM4Y14IC#05O0#Kmu?S00T$@qyW+Y8GtN64j>PJ z0}ucO01}`GPy(O;$^bM#1)vI01E>Qu0Ga?TfOca9SjUQ=AQ0J@GP%-pxG@atRjU28 zGM}81=|EeFoa|?mE0`gQ1~b<6^JJE-h8Wv13xSbkALezpXm+T<#3Necmq~$3tiN3J zRj*mL_Lw8wVEWdZ2}tm_u&#??ypbaVL9Pqeh5?q!b|J1yKL4cW{d^L6gz zEaH`yxk@Dx{y9}JFgBqJntweR_-~*>cElxX96RT;bBa#w6hZY7zEW{R=t+N+ZIwj! zqdUiiV{iT}_gRPsW4v76%ORy4bup(|H7=8^3fIQv6X)~due&L5n78UR8b@1tu?up{ zg{w1y>ue|Xj)B5rHYqkfHP6TWF7WJBdkM@Go%AH4TtQe{VJ(Wt^zV0Myy!R-MO R27#cYJO~H6Bu)|p`X30^TIT=& diff --git a/deb/opt/apps/deepin-wine-runner/information.json b/deb/opt/apps/deepin-wine-runner/information.json index 60a4ce1..b36c36f 100755 --- a/deb/opt/apps/deepin-wine-runner/information.json +++ b/deb/opt/apps/deepin-wine-runner/information.json @@ -13,7 +13,7 @@ "感谢 @PossibleVing 提供的新版应用图标", "感谢 @zhengjl 反馈的 1.7.0 中 .net framrwork 3.5 非离线版安装包的问题以及 1.8.0 重复路径一直自动重复增加的问题", "感谢 @国川 @刘岐 提供的非 i386、amd64 运行 wine 使用 i386/amd64 可执行文件的教程和脚本", - "感谢 @勇往直前 梦想启航 @189******09 @tfhyl 提供在非 X86 平台的国产 PC 进行测试", + "感谢 @王俊文 @189******09 @tfhyl 提供在非 X86 平台的国产 PC 进行测试", "感谢 @cuisirwork 提供的提供视频教程的建议", "感谢 @办公助手 提供的非 X86 平台 Wine 运行自定义 exe 应用教程和 deb 包", "感谢 @季星火 反馈的无法使用该程序删除生成的 .desktop 的问题", diff --git a/deb/opt/apps/deepin-wine-runner/package-script.zip b/deb/opt/apps/deepin-wine-runner/package-script.zip index afd6c0520706ef7ecde6ffeeebd4b2e42d118867..e4e994d6d8b65c1ecb55f96cc7d82b01fe80dae7 100755 GIT binary patch delta 361 zcmeBOA=JApiv85!X^HMdXt!N|o7l4zg* zn{oU6-%M`exzRcNR!~Xg*$AA@Vj|pVvhOn|in5%igvM&;uUkMxW<=@Wl33QzQPU{(uc-Z+7o3n4gt_hUw`=`&kc_$D9XQUl3P ze$Dj_Oh4g145nA{gn{VI%)C5IU;!ci{a}GB{I4XK8%{AbAJo`>P=oRDE>vS3L5jBj zf6Vxi7gd65y5J{9XRvJeC&nnSq1(57VH5zfrXT;tI2$CnJoP&xBV4EE_DMe&xtKxr zwa@>}xPAU_rniC2orNsZ`+b?S!G`_yWsYG6vtk07xxq@eXN53V^Mb`*Br?AeKo~du ze-X1PoGU!tx|rD>tgg10S%4ADnoz>L55fv8W3~sgrcW+seg$?zLk08ph6※1、新增新的 Wine 安装器,并支持将安 ''' for i in information["Thank"]: thankText += f"{i}\n" -updateTime = "2022年08月24日" +updateTime = "2022年08月26日" about = f'''

关于

一个能让Linux用户更加方便运行Windows应用的程序,内置了对wine图形化的支持和各种Wine工具和自制Wine程序打包器、运行库安装工具等等

同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具,可以做到只需要用户下载系统镜像并点击安装即可,无需顾及虚拟机安装、创建、虚拟机的分区等等

diff --git a/package-script.zip b/package-script.zip index afd6c0520706ef7ecde6ffeeebd4b2e42d118867..e4e994d6d8b65c1ecb55f96cc7d82b01fe80dae7 100755 GIT binary patch delta 361 zcmeBOA=JApiv85!X^HMdXt!N|o7l4zg* zn{oU6-%M`exzRcNR!~Xg*$AA@Vj|pVvhOn|in5%igvM&;uUkMxW<=@Wl33QzQPU{(uc-Z+7o3n4gt_hUw`=`&kc_$D9XQUl3P ze$Dj_Oh4g145nA{gn{VI%)C5IU;!ci{a}GB{I4XK8%{AbAJo`>P=oRDE>vS3L5jBj zf6Vxi7gd65y5J{9XRvJeC&nnSq1(57VH5zfrXT;tI2$CnJoP&xBV4EE_DMe&xtKxr zwa@>}xPAU_rniC2orNsZ`+b?S!G`_yWsYG6vtk07xxq@eXN53V^Mb`*Br?AeKo~du ze-X1PoGU!tx|rD>tgg10S%4ADnoz>L55fv8W3~sgrcW+seg$?zLk08ph6