更新postinst和postrm
新文件: com.gitee.uengine.runner.spark.deb
This commit is contained in:
parent
4862b7c464
commit
db6cc69be3
|
@ -2,5 +2,6 @@
|
||||||
<title>UEngine 运行器</title>
|
<title>UEngine 运行器</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<p>Hello World!</p>
|
<p>UEngine 运行器下载链接:</p>
|
||||||
|
<p><a href="https://gitee.com/gfdgd-xi-org/uengine-runner/releases">https://gitee.com/gfdgd-xi-org/uengine-runner/releases</a></p>
|
||||||
</body>
|
</body>
|
Binary file not shown.
|
@ -1,7 +1,7 @@
|
||||||
Package: com.gitee.uengine.runner.spark
|
Package: com.gitee.uengine.runner.spark
|
||||||
Source: com.gitee.uengine.runner.spark
|
Source: com.gitee.uengine.runner.spark
|
||||||
Replaces: spark-uengine-runner, com.gitee.uengine.runner.spark.ubuntu
|
Replaces: spark-uengine-runner, com.gitee.uengine.runner.spark.ubuntu
|
||||||
Version: 1.8.3-uos
|
Version: 2.0.0
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Section: utils
|
Section: utils
|
||||||
Installed-Size: 1544
|
Installed-Size: 1544
|
||||||
|
|
|
@ -18,6 +18,7 @@ ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-useadb
|
||||||
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-launch.sh /usr/bin/uengine-runner-launch.sh
|
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-launch.sh /usr/bin/uengine-runner-launch.sh
|
||||||
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-update-bug /usr/bin/uengine-runner-update-bug
|
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-update-bug /usr/bin/uengine-runner-update-bug
|
||||||
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/root-uengine /usr/bin/uengine-root
|
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/root-uengine /usr/bin/uengine-root
|
||||||
|
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/AutoShell/main.py /usr/bin/uengine-runner-auto-install-bash
|
||||||
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-applist-launch.sh /usr/bin/uengine-runner-applist-launch.sh
|
ln -s /opt/apps/com.gitee.uengine.runner.spark/files/uengine-runner-applist-launch.sh /usr/bin/uengine-runner-applist-launch.sh
|
||||||
# 刷新图标缓存
|
# 刷新图标缓存
|
||||||
# 因为 Ubuntu 的问题,省略
|
# 因为 Ubuntu 的问题,省略
|
||||||
|
|
|
@ -1,4 +1,11 @@
|
||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
|
# 使用系统默认的 bash 运行
|
||||||
|
#################################################################################################################
|
||||||
|
# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢
|
||||||
|
# 版本:2.0.0
|
||||||
|
# 更新时间:2022年01月16日
|
||||||
|
# 基于 bash
|
||||||
|
#################################################################################################################
|
||||||
# 删除软链接
|
# 删除软链接
|
||||||
rm -f /usr/bin/uengine-runner
|
rm -f /usr/bin/uengine-runner
|
||||||
rm -f /usr/bin/uengine-apk-builder
|
rm -f /usr/bin/uengine-apk-builder
|
||||||
|
@ -14,6 +21,12 @@ rm -f /usr/bin/uengine-root
|
||||||
rm -fr /opt/apps/com.gitee.uengine.runner.spark/files/api/__pycache__
|
rm -fr /opt/apps/com.gitee.uengine.runner.spark/files/api/__pycache__
|
||||||
rm -fr /opt/apps/com.gitee.uengine.runner.spark/files/__pycache__
|
rm -fr /opt/apps/com.gitee.uengine.runner.spark/files/__pycache__
|
||||||
rm -f /usr/bin/uengine-runner-applist-launch.sh
|
rm -f /usr/bin/uengine-runner-applist-launch.sh
|
||||||
|
rm -f /usr/bin/uengine-runner-auto-install-bash
|
||||||
|
# 删除软件残留,简单粗暴一点直接全部删掉,防止出现警告
|
||||||
|
# 加判断是为了怕 reinstall 后程序就再也打不开了(除非卸载后重新安装)
|
||||||
|
if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then
|
||||||
|
rm -rf /opt/apps/com.gitee.uengine.runner.spark
|
||||||
|
fi
|
||||||
# 删除软件配置文件(只限“purge”)
|
# 删除软件配置文件(只限“purge”)
|
||||||
# 配置目录:~/.config/uengine-runner
|
# 配置目录:~/.config/uengine-runner
|
||||||
if [ "$1" = "purge" ]; then
|
if [ "$1" = "purge" ]; then
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,75 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import json
|
||||||
|
import platform
|
||||||
|
|
||||||
|
# 读取文本文档
|
||||||
|
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["Contribute"]:
|
||||||
|
thankText += f"{i}\n"
|
||||||
|
programEnv = [
|
||||||
|
["WINEPREFIX", f"{os.path.expanduser('~')}/.wine"],
|
||||||
|
["WINE", "deepin-wine6-stable"],
|
||||||
|
["DANGER", "0"],
|
||||||
|
["PROGRAMPATH", programPath],
|
||||||
|
["VERSION", version],
|
||||||
|
["THANK", thankText.replace("\n", "\\n")],
|
||||||
|
["MAKER", "gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
|
||||||
|
["COPYRIGHT", f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
|
||||||
|
["PLATFORM", platform.system()],
|
||||||
|
["DEBUG", str(int("--debug" in sys.argv))]
|
||||||
|
]
|
||||||
|
'''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"],
|
||||||
|
["PLATFORM)", platform.system()],
|
||||||
|
["DEBUG)", str(int("--debug" in sys.argv))]
|
||||||
|
]'''
|
||||||
|
optionAll = 0
|
||||||
|
if "--debug" in sys.argv:
|
||||||
|
optionAll += 1
|
||||||
|
if "--system" in sys.argv:
|
||||||
|
programEnv.append(["DANGER", "1"])
|
||||||
|
optionAll += 1
|
||||||
|
if os.getenv("WINE") != None:
|
||||||
|
programEnv.append(["WINE", os.getenv("WINE")])
|
||||||
|
if os.getenv("WINEPREFIX") != None:
|
||||||
|
programEnv.append(["WINEPREFIX", os.getenv("WINEPREFIX")])
|
||||||
|
# 生成可以使用的参数
|
||||||
|
commandEnv = ""
|
||||||
|
for i in programEnv:
|
||||||
|
commandEnv += f"{i[0]}=\"{i[1]}\" "
|
||||||
|
commandEnv += f"PATH=\"{programPath}/command:$PATH\" "
|
||||||
|
if len(sys.argv) - optionAll < 2:
|
||||||
|
print("Wine 运行器自动配置文件解析器交互环境(基于 Bash)")
|
||||||
|
print(f"版本:{version}")
|
||||||
|
print(f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢")
|
||||||
|
print("--------------------------------------------------------------")
|
||||||
|
os.system(f"{commandEnv} bash ")
|
||||||
|
exit()
|
||||||
|
command = ""
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
command += f"\"{i}\" "
|
||||||
|
print("Wine 运行器自动配置文件解析器(基于 Bash)")
|
||||||
|
print(f"版本:{version}")
|
||||||
|
print(f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢")
|
||||||
|
print("--------------------------------------------------------------")
|
||||||
|
os.system(f"{commandEnv} bash {command}")
|
|
@ -0,0 +1,46 @@
|
||||||
|
{
|
||||||
|
"installdll": "安装指定 dll 在指定容器\n参数数量:1\n参数介绍:dll名称或在从互联网获取DLL工具的编号,如 7012 xolehlp.dll 平台:2003 架构:64 的 7012",
|
||||||
|
"stopdll": "不允许指定 dll/exe 运行\n参数数量:1\n参数介绍:dll/exe 名称,如 example.exe",
|
||||||
|
"installfont": "安装指定字体到指定容器\n参数数量:1\n在字体商店的编号,如 5 msyhbd.ttc 的 5",
|
||||||
|
"installsparkcorefont": "安装星火应用商店的“微软核心字体”\n参数数量:0\n参数介绍:无",
|
||||||
|
"installmono": "安装最新版本的 mono 到指定容器\n参数数量:0\n参数介绍:无",
|
||||||
|
"installgecko": "安装最新版本的 gecko 到指定容器\n参数数量:0\n参数介绍:无",
|
||||||
|
"installvcpp": "安装指定的 VCPP 运行库到指定容器\n参数数量:1\n参数介绍:在安装 Visual Studio C++ 工具的编号,如 10 Visual Studio C++ 2015、2017、2019 和 2022 X64 的 10",
|
||||||
|
"installnet": "安装指定的 .net framework 运行库到指定容器\n参数数量:1\n参数介绍:在安装 .net framework 工具的编号,如 3 .net framework 4.5.1 Offline Installer 的 3",
|
||||||
|
"installmsxml": "安装指定的 MSXML 运行库到指定容器\n参数数量:1\n参数介绍:在安装 MSXML 工具的编号,如 1、MSXML 4.0 SP3 的 1",
|
||||||
|
"echo": "显示内容\n参数数量:≥1\n参数介绍:接要显示的内容",
|
||||||
|
"info": "显示提示对话框\n参数数量:2\n参数介绍:标题+显示内容",
|
||||||
|
"error": "显示错误对话框\n参数数量:2\n参数介绍:标题+显示内容",
|
||||||
|
"warning": "显示警告对话框\n参数数量:2\n参数介绍:标题+显示内容",
|
||||||
|
"exit": "退出程序\n参数数量:0\n参数介绍:无",
|
||||||
|
"bat": "执行 cmd 命令在 Wine 容器内(在 Windows 将在系统执行命令)\n参数数量:≥1\n参数介绍:接要执行的命令",
|
||||||
|
"bash": "执行 bash 命令(在 Windows 系统将执行 cmd 命令)\n参数数量:≥1\n参数介绍:接要执行的命令",
|
||||||
|
"version": "显示解释器版本(Wine 运行器版本)\n参数数量:0\n参数介绍:无",
|
||||||
|
"thank": "显示谢明列表\n参数数量:0\n参数介绍:无",
|
||||||
|
"pause": "按回车键后继续\n参数数量:0\n参数介绍:无",
|
||||||
|
"download": "使用 aria2 下载文件\n参数数量:≥1 && ≤3\n参数介绍:下载URL+保存在的文件夹+保存的文件名",
|
||||||
|
"installdxvk": "安装 dxvk 到指定容器\n参数数量:0\n参数介绍:无",
|
||||||
|
"createbotton": "在指定目录创建容器\n参数数量:0\n参数介绍:无",
|
||||||
|
"reg": "导入 .reg 文件\n参数数量:0\n参数介绍:reg 文件路径",
|
||||||
|
"enabledopengl": "开启 OpenGL\n参数数量:0\n参数介绍:无",
|
||||||
|
"disbledopengl": "关闭 OpenGL\n参数数量:0\n参数介绍:无",
|
||||||
|
"winecfg": "显示“Wine 设置”\n参数数量:0\n参数介绍:无",
|
||||||
|
"winver": "显示“关于 Wine”\n参数数量:0\n参数介绍:无",
|
||||||
|
"changeversion": "更改 Wine 容器系统版本(未实现)\n参数数量:无\n参数介绍:无",
|
||||||
|
"cat": "显示指定文件(只支持显示编码为UTF-8的文件)\n参数数量:1\n参数介绍:无",
|
||||||
|
"enabledhttpproxy": "设置指定容器代理\n参数数量:2\n参数介绍:代理服务器地址+端口",
|
||||||
|
"disbledhttpproxy": "禁用指定容器代理\n参数数量:0\n参数介绍:无",
|
||||||
|
"enabledwinecrashdialog": "启用 Wine 容器程序崩溃提示窗口\n参数数量:0\n参数介绍:无",
|
||||||
|
"disbledwinecrashdialog": "禁用 Wine 容器程序崩溃提示窗口\n参数数量:0\n参数介绍:无",
|
||||||
|
"disbledWinebottlecreatelink": "禁止 Wine 容器生成快捷方式\n参数数量:0\n参数介绍:无",
|
||||||
|
"enabledWinebottlecreatelink": "允许 Wine 容器生成快捷方式\n参数数量:0\n参数介绍:无",
|
||||||
|
"killall": "杀死指定进程\n参数数量:1\n参数介绍:进程名",
|
||||||
|
"control": "打开控制面板\n参数数量:0\n参数介绍:无",
|
||||||
|
"taskmgr": "打开任务管理器\n参数数量:0\n参数介绍:无",
|
||||||
|
"killallwineserver": "杀死所有 Wine 程序\n参数数量:0\n参数介绍:无",
|
||||||
|
"installvb": "安装指定的 VB 运行库到指定容器\n参数数量:1\n参数介绍:在安装 Visual Basic Runtime 工具的编号,如 4 Visual Basic Runtime Visual Basic 6",
|
||||||
|
"installother": "安装未归类的运行库到指定容器\n参数数量:1\n参数介绍:在安装其它运行库工具的编号,如 2 MFC运行库",
|
||||||
|
"decompressionbottle": "解压用 wine 打包的 deb 包内的容器到指定路径\n参数数量:2\n参数介绍:deb 包路径+要解压到的路径",
|
||||||
|
"programforum": "打开程序论坛\n参数数量:0\n参数介绍:无",
|
||||||
|
"installmsi": "安装 MSI 文件到指定容器\n参数数量:1\n参数介绍:msi 文件路径"
|
||||||
|
}
|
|
@ -0,0 +1,673 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 使用系统默认的 python3 运行
|
||||||
|
###########################################################################################
|
||||||
|
# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢
|
||||||
|
# 版本:3.0.1
|
||||||
|
# 更新时间:2022年10月05日
|
||||||
|
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
|
||||||
|
# 基于 Python3 构建
|
||||||
|
###########################################################################################
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import json
|
||||||
|
import random
|
||||||
|
import api as uengineapi
|
||||||
|
import platform
|
||||||
|
import traceback
|
||||||
|
import webbrowser
|
||||||
|
import subprocess
|
||||||
|
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 = ""
|
||||||
|
helpList = json.loads(readtxt(f"{programPath}/ConfigLanguareRunner-help.json"))
|
||||||
|
for i in information["Contribute"]:
|
||||||
|
thankText += f"{i}\n"
|
||||||
|
programEnv = [
|
||||||
|
["($WINEPREFIX)", f"{os.path.expanduser('~')}/.wine"],
|
||||||
|
["($WINE)", "deepin-wine6-stable"],
|
||||||
|
#["($DANGER)", "0"],
|
||||||
|
["($DANGER)", "1"],
|
||||||
|
["($HOME)", os.path.expanduser('~')],
|
||||||
|
["($PROGRAMPATH)", programPath],
|
||||||
|
["($VERSION)", version],
|
||||||
|
["($THANK)", thankText],
|
||||||
|
["($MAKER)", "RacoonGX 团队,By gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
|
||||||
|
["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} RacoonGX 团队,By gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
|
||||||
|
["($?)", "0"],
|
||||||
|
["($PLATFORM)", platform.system()],
|
||||||
|
["($DEBUG)", "1"]
|
||||||
|
#["($DEBUG)", str(int("--debug" in sys.argv))]
|
||||||
|
]
|
||||||
|
readOnlyEnv = [
|
||||||
|
"($DANGER)",
|
||||||
|
"($HOME)",
|
||||||
|
"($PROGRAMPATH)",
|
||||||
|
"($VERSION)",
|
||||||
|
"($THANK)",
|
||||||
|
"($MAKER)",
|
||||||
|
"($COPYRIGHT)",
|
||||||
|
"($?)",
|
||||||
|
"($SYSTEM)",
|
||||||
|
"($DEBUG)"
|
||||||
|
]
|
||||||
|
|
||||||
|
def FindFile(file, name):
|
||||||
|
for i in os.listdir(file):
|
||||||
|
path = f"{file}/{i}"
|
||||||
|
if os.path.isdir(path):
|
||||||
|
returnPath = FindFile(path, name)
|
||||||
|
if returnPath != None:
|
||||||
|
return returnPath.replace("//", "/")
|
||||||
|
if os.path.isfile(path):
|
||||||
|
if i == name:
|
||||||
|
return path
|
||||||
|
return None
|
||||||
|
|
||||||
|
def Debug():
|
||||||
|
if "--debug" in sys.argv:
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
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",
|
||||||
|
"cat",
|
||||||
|
"taskmgr",
|
||||||
|
"control",
|
||||||
|
"killall",
|
||||||
|
"killallwineserver",
|
||||||
|
"enabledhttpproxy",
|
||||||
|
"disbledhttpproxy",
|
||||||
|
"enabledwinecrashdialog",
|
||||||
|
"disbledwinecrashdialog",
|
||||||
|
"disbledWinebottlecreatelink",
|
||||||
|
"enabledWinebottlecreatelink",
|
||||||
|
"installvb",
|
||||||
|
"installother",
|
||||||
|
"decompressionbottle",
|
||||||
|
"programforum",
|
||||||
|
"installmsi",
|
||||||
|
"installapk"
|
||||||
|
]
|
||||||
|
|
||||||
|
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["Contribute"]:
|
||||||
|
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:
|
||||||
|
return 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:
|
||||||
|
# Windows 直接转换为以 cmd 运行
|
||||||
|
if platform.system() == "Windows":
|
||||||
|
# 直接调用 Bash 函数
|
||||||
|
return self.Bash()
|
||||||
|
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}' "
|
||||||
|
return os.system(commandStr)
|
||||||
|
|
||||||
|
def Version(self):
|
||||||
|
print(f"版本:{version}")
|
||||||
|
print(f"©2020~{time.strftime('%Y')} RacoonGX 团队,By 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()
|
||||||
|
|
||||||
|
def Cat(self):
|
||||||
|
try:
|
||||||
|
file = open(self.command[1], "r")
|
||||||
|
print(file.read())
|
||||||
|
file.close()
|
||||||
|
return 0
|
||||||
|
except:
|
||||||
|
print("文件读取错误")
|
||||||
|
Debug()
|
||||||
|
return 1
|
||||||
|
|
||||||
|
def Taskmgr(self):
|
||||||
|
self.command = ["bat", "taskmgr"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def Control(self):
|
||||||
|
self.command = ["bat", "control"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def Killall(self):
|
||||||
|
return os.system(f"killall -9 {self.command[1]}")
|
||||||
|
|
||||||
|
def KillallWineServer(self):
|
||||||
|
command = ["WINEPREFIX='($WINEPREFIX)'", "($WINE)", "-k"]
|
||||||
|
for i in programEnv:
|
||||||
|
for k in range(len(command)):
|
||||||
|
command[k] = command[k].replace(i[0], i[1])
|
||||||
|
if "box86" in command[1] or "exagear" in command[1] or "box64" in command[1]:
|
||||||
|
print("不支持此 Wine")
|
||||||
|
return 1
|
||||||
|
if os.path.exists(command[1]):
|
||||||
|
# 文件存在
|
||||||
|
command[1] = f"{os.path.dirname(command[1])}/wineserver"
|
||||||
|
else:
|
||||||
|
# 读 which
|
||||||
|
command[1] = f"{os.path.dirname(subprocess.getoutput(f'which {command[1]}').strip())}/wineserver"
|
||||||
|
commandStr = command[0] + " "
|
||||||
|
for i in command[1:]:
|
||||||
|
commandStr += f"'{i}' "
|
||||||
|
return os.system(commandStr)
|
||||||
|
|
||||||
|
def EnabledWineBottleCreateLink(self):
|
||||||
|
self.command = ["bat", "reg", "delete", "HKEY_CURRENT_USER\Software\Wine\DllOverrides", "/v", "winemenubuilder.exe", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def DisbledWineBottleCreateLink(self):
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\DllOverrides", "/v", "winemenubuilder.exe", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def DisbledWineCrashDialog(self):
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\WineDbg", "/v", "ShowCrashDialog", "/t", "REG_DWORD", "/d", "00000000", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def EnabledWineCrashDialog(self):
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\WineDbg", "/v", "ShowCrashDialog", "/t", "REG_DWORD", "/d", "00000001", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def EnabledHttpProxy(self):
|
||||||
|
proxyServerAddress = self.command[1]
|
||||||
|
port = self.command[2]
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "00000001", "/f"]
|
||||||
|
self.Bat()
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyServer", "/d", f"{proxyServerAddress}:{port}", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def DecompressionBottle(self):
|
||||||
|
tempDebDir = f"/tmp/wine-runner-unpack-deb-{random.randint(0, 1000)}"
|
||||||
|
if os.system(f"dpkg -x '{self.command[1]}' '{tempDebDir}'"):
|
||||||
|
return 1
|
||||||
|
zippath = FindFile(tempDebDir, "files.7z")
|
||||||
|
if zippath == None:
|
||||||
|
return 2
|
||||||
|
# 解压文件
|
||||||
|
os.system(f"mkdir -p '{self.command[2]}'")
|
||||||
|
fi = os.system(f"7z x -y '{zippath}' -o'{self.command[2]}'")
|
||||||
|
os.system(f"rm -rfv '{tempDebDir}'")
|
||||||
|
return fi
|
||||||
|
|
||||||
|
|
||||||
|
def DisbledHttpProxy(self):
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "00000000", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def InstallVB(self):
|
||||||
|
import InstallVisualBasicRuntime
|
||||||
|
return InstallVisualBasicRuntime.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||||
|
|
||||||
|
def InstallOther(self):
|
||||||
|
import InstallOther
|
||||||
|
return InstallOther.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||||
|
|
||||||
|
def ProgramForum(self):
|
||||||
|
webbrowser.open_new_tab("https://gfdgdxi.flarum.cloud/")
|
||||||
|
return
|
||||||
|
|
||||||
|
def InstallMSI(self):
|
||||||
|
self.command = ["bat", "msiexec", "/i", self.command[1]]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def InstallApk(self):
|
||||||
|
if os.system("which uengine > /dev/null"):
|
||||||
|
print("未安装 UEngine,无法使用该命令")
|
||||||
|
return 1
|
||||||
|
apk = uengineapi.APK(self.command[1])
|
||||||
|
result = apk.install()
|
||||||
|
homePath = os.getenv("HOME")
|
||||||
|
if not os.path.exists(f"{homePath}/.local/share/applications/uengine"):
|
||||||
|
os.makedirs(f"{homePath}/.local/share/applications/uengine")
|
||||||
|
if not os.path.exists(f"{homePath}/.local/share/icons/hicolor/apps"):
|
||||||
|
os.makedirs(f"{homePath}/.local/share/icons/hicolor/apps")
|
||||||
|
package = apk.packageName()
|
||||||
|
apk.saveApkIcon(f"{homePath}/.local/share/icons/hicolor/apps/{package}.png")
|
||||||
|
apk.saveDesktopFile(f"{homePath}/.local/share/applications/uengine/{package}.desktop", f"{homePath}/.local/share/icons/hicolor/apps/{package}.png")
|
||||||
|
return result
|
||||||
|
|
||||||
|
# 可以运行的命令的映射关系
|
||||||
|
# 可以被使用的命令的映射
|
||||||
|
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,
|
||||||
|
"cat": Cat,
|
||||||
|
"taskmgr": Taskmgr,
|
||||||
|
"control": Control,
|
||||||
|
"killallwineserver": KillallWineServer,
|
||||||
|
"enabledhttpproxy": EnabledHttpProxy,
|
||||||
|
"disbledhttpproxy": DisbledHttpProxy,
|
||||||
|
"enabledwinecrashdialog": EnabledWineCrashDialog,
|
||||||
|
"disbledwinecrashdialog": DisbledWineCrashDialog,
|
||||||
|
"disbledWinebottlecreatelink": DisbledWineBottleCreateLink,
|
||||||
|
"enabledWinebottlecreatelink": EnabledWineBottleCreateLink,
|
||||||
|
"installvb": InstallVB,
|
||||||
|
"installother": InstallOther,
|
||||||
|
"decompressionbottle": DecompressionBottle,
|
||||||
|
"programforum": ProgramForum,
|
||||||
|
"installmsi": InstallMSI,
|
||||||
|
"installapk": InstallApk
|
||||||
|
}
|
||||||
|
|
||||||
|
# 参数数列表
|
||||||
|
commandInfo = {
|
||||||
|
"killall": [1],
|
||||||
|
"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],
|
||||||
|
"cat": [1],
|
||||||
|
"taskmgr": [0],
|
||||||
|
"control": [0],
|
||||||
|
"killallwineserver": [0],
|
||||||
|
"enabledhttpproxy": [2],
|
||||||
|
"disbledhttpproxy": [0],
|
||||||
|
"enabledwinecrashdialog": [0],
|
||||||
|
"disbledwinecrashdialog": [0],
|
||||||
|
"disbledWinebottlecreatelink": [0],
|
||||||
|
"enabledWinebottlecreatelink": [0],
|
||||||
|
"installvb": [1],
|
||||||
|
"installother": [1],
|
||||||
|
"decompressionbottle": [2],
|
||||||
|
"programforum": [0],
|
||||||
|
"installmsi": [1],
|
||||||
|
"installapk": [1]
|
||||||
|
}
|
||||||
|
windowsUnrun = [
|
||||||
|
"createbotton",
|
||||||
|
"installdll",
|
||||||
|
"installmono",
|
||||||
|
"installgecko",
|
||||||
|
"winecfg",
|
||||||
|
"stopdll",
|
||||||
|
"changeversion",
|
||||||
|
"enabledopengl",
|
||||||
|
"disbledopengl",
|
||||||
|
"installdxvk",
|
||||||
|
"installfont",
|
||||||
|
"installsparkcorefont",
|
||||||
|
"decompressionbottle",
|
||||||
|
"installapk"
|
||||||
|
]
|
||||||
|
# 解析
|
||||||
|
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
|
||||||
|
# 解析命令是否可以在 Windows 使用(只限在 Windows 系统时)
|
||||||
|
if platform.system() == "Windows" and i[0] in self.windowsUnrun:
|
||||||
|
print("此命令不支持在 Windows 上运行")
|
||||||
|
programEnv[9][1] = "-5"
|
||||||
|
continue
|
||||||
|
# 获取程序帮助信息
|
||||||
|
try:
|
||||||
|
if i[1] == "--help":
|
||||||
|
print(helpList[i[0]].replace("\\n", "\n"))
|
||||||
|
continue
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
# 正常命令解析
|
||||||
|
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])
|
||||||
|
try:
|
||||||
|
commandReturn = self.commandList[i[0]](self)
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
commandReturn = 1
|
||||||
|
if commandReturn:
|
||||||
|
print(f"运行命令{' '.join(self.command)}出现错误,返回值:", commandReturn)
|
||||||
|
programEnv[9][1] = str(commandReturn)
|
||||||
|
if self.close:
|
||||||
|
break
|
||||||
|
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
if os.getenv("WINE") != None:
|
||||||
|
programEnv[1][1] = os.getenv("WINE")
|
||||||
|
if os.getenv("WINEPREFIX") != None:
|
||||||
|
programEnv[0][1] = os.getenv("WINEPREFIX")
|
||||||
|
if __name__ == "__main__":
|
||||||
|
optionAll = 0
|
||||||
|
if "--debug" in sys.argv:
|
||||||
|
optionAll += 1
|
||||||
|
if "--system" in sys.argv:
|
||||||
|
programEnv[2][1] = "1"
|
||||||
|
optionAll += 1
|
||||||
|
if len(sys.argv) - optionAll < 2:
|
||||||
|
print("Wine 运行器自动配置文件解析器交互环境")
|
||||||
|
print(f"版本:{version}")
|
||||||
|
print(f"©2020~{time.strftime('%Y')} RacoonGX 团队,By gfdgd xi、为什么您不喜欢熊出没和阿布呢")
|
||||||
|
print("--------------------------------------------------------------")
|
||||||
|
while True:
|
||||||
|
commandLine = input(">")
|
||||||
|
if commandLine == "exit":
|
||||||
|
break
|
||||||
|
com = Command(commandLine)
|
||||||
|
com.Run(com.GetCommandList(), programEnv[0][1], programEnv[1][1])
|
||||||
|
sys.exit(int(programEnv[9][1]))
|
||||||
|
# 读取文件
|
||||||
|
try:
|
||||||
|
file = open(sys.argv[1], "r")
|
||||||
|
com = Command(file.read())
|
||||||
|
file.close()
|
||||||
|
except:
|
||||||
|
print("错误:无法读取该文件,无法继续")
|
||||||
|
sys.exit(1)
|
||||||
|
print("Wine 运行器自动配置文件解析器")
|
||||||
|
print(f"版本:{version}")
|
||||||
|
print(f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢")
|
||||||
|
print("--------------------------------------------------------------")
|
||||||
|
com.Run(com.GetCommandList(), programEnv[0][1], programEnv[1][1])
|
||||||
|
sys.exit(int(programEnv[9][1]))
|
|
@ -0,0 +1,122 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import base64
|
||||||
|
import traceback
|
||||||
|
import requests
|
||||||
|
import PyQt5.QtGui as QtGui
|
||||||
|
import PyQt5.QtCore as QtCore
|
||||||
|
import PyQt5.QtWidgets as QtWidgets
|
||||||
|
|
||||||
|
class ProgramRunStatusShow():
|
||||||
|
msgWindow = None
|
||||||
|
def ShowWindow():
|
||||||
|
try:
|
||||||
|
fenlists = []
|
||||||
|
for i in range(6):
|
||||||
|
fenlists.append(int(requests.get(base64.b64decode("aHR0cHM6Ly9jb2RlLmdpdGxpbmsub3JnLmNuL2dmZGdkLXhpLW9yZy93aW5lLXJ1bm5lci1kb3dubG9hZHMtb2YtcnVubmVyL3Jhdy9icmFuY2gvbWFzdGVyL0Zlbi1VRW5naW5lL0Zlbg==").decode("utf-8") + f"{i}.txt").text))
|
||||||
|
tipsInfo = ""
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
fenlists = [0, 0, 0, 0, 0]
|
||||||
|
tipsInfo = "暂时无人提交此脚本运行情况,是否立即提交?"
|
||||||
|
|
||||||
|
maxHead = fenlists.index(max(fenlists))
|
||||||
|
allNumber = 0
|
||||||
|
for i in fenlists:
|
||||||
|
allNumber += i
|
||||||
|
try:
|
||||||
|
#tipsInfo = ""
|
||||||
|
for i in range(len(fenlists)):
|
||||||
|
# 显示整数
|
||||||
|
tipsInfo += f"有 {int(fenlists[i] / allNumber * 100)}% 的用户选择了 {i} 分({fenlists[i]}/{allNumber})\n"
|
||||||
|
maxNumber = int(max(fenlists) / allNumber * 100)
|
||||||
|
#if tipsInfo == "":
|
||||||
|
# tipsInfo = f"有{maxNumber}%的用户选择了这个评分"
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
ProgramRunStatusShow.msgWindow = QtWidgets.QMainWindow()
|
||||||
|
msgWidget = QtWidgets.QWidget()
|
||||||
|
msgWidgetLayout = QtWidgets.QGridLayout()
|
||||||
|
starLayout = QtWidgets.QHBoxLayout()
|
||||||
|
uploadButton = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "点此上传运行情况"))
|
||||||
|
uploadButton.clicked.connect(ProgramRunStatusUpload.ShowWindow)
|
||||||
|
msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "综合评价:")), 0, 0)
|
||||||
|
msgWidgetLayout.addLayout(starLayout, 0, 1)
|
||||||
|
msgWidgetLayout.addWidget(QtWidgets.QLabel(tipsInfo), 1, 0, 1, 2)
|
||||||
|
msgWidgetLayout.addWidget(uploadButton, 3, 0, 1, 2)
|
||||||
|
end = 5
|
||||||
|
if maxHead > 5:
|
||||||
|
for i in range(end):
|
||||||
|
starLayout.addWidget(QtWidgets.QLabel(f"<img src='{programPath}/Icon/BadStar.svg' width=50>"))
|
||||||
|
else:
|
||||||
|
for i in range(maxHead):
|
||||||
|
starLayout.addWidget(QtWidgets.QLabel(f"<img src='{programPath}/Icon/Star.svg' width=50>"))
|
||||||
|
head = maxHead
|
||||||
|
for i in range(head, end):
|
||||||
|
starLayout.addWidget(QtWidgets.QLabel(f"<img src='{programPath}/Icon/UnStar.svg' width=50>"))
|
||||||
|
msgWidget.setLayout(msgWidgetLayout)
|
||||||
|
ProgramRunStatusShow.msgWindow.setCentralWidget(msgWidget)
|
||||||
|
ProgramRunStatusShow.msgWindow.setWindowIcon(QtGui.QIcon(iconPath))
|
||||||
|
ProgramRunStatusShow.msgWindow.setWindowTitle(f"程序运行情况")
|
||||||
|
ProgramRunStatusShow.msgWindow.show()
|
||||||
|
|
||||||
|
class ProgramRunStatusUpload():
|
||||||
|
msgWindow = None
|
||||||
|
starLayout = None
|
||||||
|
fen = None
|
||||||
|
starList = []
|
||||||
|
sha1Value = ""
|
||||||
|
programName = None
|
||||||
|
def ChangeStar():
|
||||||
|
if ProgramRunStatusUpload.fen.currentIndex() > 5:
|
||||||
|
for i in ProgramRunStatusUpload.starList:
|
||||||
|
i.setText(f"<img src='{programPath}/Icon/BadStar.svg' width=25>")
|
||||||
|
return
|
||||||
|
for i in range(ProgramRunStatusUpload.fen.currentIndex()):
|
||||||
|
ProgramRunStatusUpload.starList[i].setText(f"<img src='{programPath}/Icon/Star.svg' width=25>")
|
||||||
|
head = ProgramRunStatusUpload.fen.currentIndex()
|
||||||
|
end = len(ProgramRunStatusUpload.starList)
|
||||||
|
for i in range(head, end):
|
||||||
|
ProgramRunStatusUpload.starList[i].setText(f"<img src='{programPath}/Icon/UnStar.svg' width=25>")
|
||||||
|
|
||||||
|
def ShowWindow():
|
||||||
|
ProgramRunStatusUpload.starList = []
|
||||||
|
ProgramRunStatusUpload.msgWindow = QtWidgets.QMainWindow(ProgramRunStatusShow.msgWindow)
|
||||||
|
msgWidget = QtWidgets.QWidget()
|
||||||
|
msgWidgetLayout = QtWidgets.QGridLayout()
|
||||||
|
ProgramRunStatusUpload.fen = QtWidgets.QComboBox()
|
||||||
|
ProgramRunStatusUpload.starLayout = QtWidgets.QHBoxLayout()
|
||||||
|
upload = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "上传"))
|
||||||
|
upload.clicked.connect(ProgramRunStatusUpload.Upload)
|
||||||
|
# 生成星星列表
|
||||||
|
for i in [1, 1, 1, 1, 1]:
|
||||||
|
ProgramRunStatusUpload.starList.append(QtWidgets.QLabel(f"<img src='{programPath}/Icon/{['Un', ''][i]}Star.svg' width=25>"))
|
||||||
|
ProgramRunStatusUpload.starLayout.addWidget(ProgramRunStatusUpload.starList[-1])
|
||||||
|
ProgramRunStatusUpload.starLayout.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum))
|
||||||
|
ProgramRunStatusUpload.fen.addItems(["0分", "1分", "2分", "3分", "4分", "5分"])
|
||||||
|
ProgramRunStatusUpload.fen.setCurrentIndex(5)
|
||||||
|
ProgramRunStatusUpload.fen.currentIndexChanged.connect(ProgramRunStatusUpload.ChangeStar)
|
||||||
|
msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "评分:")), 1, 0)
|
||||||
|
msgWidgetLayout.addWidget(ProgramRunStatusUpload.fen, 1, 1)
|
||||||
|
msgWidgetLayout.addLayout(ProgramRunStatusUpload.starLayout, 2, 1)
|
||||||
|
msgWidgetLayout.addWidget(upload, 3, 1)
|
||||||
|
msgWidget.setLayout(msgWidgetLayout)
|
||||||
|
ProgramRunStatusUpload.msgWindow.setCentralWidget(msgWidget)
|
||||||
|
ProgramRunStatusUpload.msgWindow.setWindowTitle(QtCore.QCoreApplication.translate("U", "上传程序运行情况"))
|
||||||
|
ProgramRunStatusUpload.msgWindow.setWindowIcon(QtGui.QIcon(iconPath))
|
||||||
|
ProgramRunStatusUpload.msgWindow.show()
|
||||||
|
|
||||||
|
def Upload():
|
||||||
|
try:
|
||||||
|
QtWidgets.QMessageBox.information(ProgramRunStatusUpload.msgWindow, QtCore.QCoreApplication.translate("U", "提示"), requests.get(f"http://120.25.153.144/spark-deepin-wine-runner/Install.php?Version=Fen{ProgramRunStatusUpload.fen.currentIndex()}-UEngine").json()["Error"])
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
QtWidgets.QMessageBox.critical(ProgramRunStatusUpload.msgWindow, QtCore.QCoreApplication.translate("U", "错误"), QtCore.QCoreApplication.translate("U", "数据上传失败!"))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
iconPath = "{}/deepin-wine-runner.svg".format(programPath)
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
ProgramRunStatusShow.ShowWindow()
|
||||||
|
app.exec_()
|
|
@ -0,0 +1,125 @@
|
||||||
|
# -*- 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.getInfoButton = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.getInfoButton.setObjectName("getInfoButton")
|
||||||
|
self.horizontalLayout_2.addWidget(self.getInfoButton)
|
||||||
|
self.getFen = QtWidgets.QPushButton(self.centralwidget)
|
||||||
|
self.getFen.setObjectName("getFen")
|
||||||
|
self.horizontalLayout_2.addWidget(self.getFen)
|
||||||
|
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")
|
||||||
|
self.menu_2 = QtWidgets.QMenu(self.menubar)
|
||||||
|
self.menu_2.setObjectName("menu_2")
|
||||||
|
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.actionGitlink = QtWidgets.QAction(MainWindow)
|
||||||
|
self.actionGitlink.setCheckable(True)
|
||||||
|
self.actionGitlink.setChecked(True)
|
||||||
|
self.actionGitlink.setObjectName("actionGitlink")
|
||||||
|
self.actionGitee = QtWidgets.QAction(MainWindow)
|
||||||
|
self.actionGitee.setCheckable(True)
|
||||||
|
self.actionGitee.setObjectName("actionGitee")
|
||||||
|
self.actionGithub = QtWidgets.QAction(MainWindow)
|
||||||
|
self.actionGithub.setCheckable(True)
|
||||||
|
self.actionGithub.setObjectName("actionGithub")
|
||||||
|
self.action_IPv6 = QtWidgets.QAction(MainWindow)
|
||||||
|
self.action_IPv6.setCheckable(True)
|
||||||
|
self.action_IPv6.setObjectName("action_IPv6")
|
||||||
|
self.action = QtWidgets.QAction(MainWindow)
|
||||||
|
self.action.setCheckable(True)
|
||||||
|
self.action.setObjectName("action")
|
||||||
|
self.action_2 = QtWidgets.QAction(MainWindow)
|
||||||
|
self.action_2.setCheckable(True)
|
||||||
|
self.action_2.setChecked(False)
|
||||||
|
self.action_2.setObjectName("action_2")
|
||||||
|
self.action_3 = QtWidgets.QAction(MainWindow)
|
||||||
|
self.action_3.setCheckable(True)
|
||||||
|
self.action_3.setObjectName("action_3")
|
||||||
|
self.menu.addAction(self.openFile)
|
||||||
|
self.menu.addSeparator()
|
||||||
|
self.menu.addAction(self.exitProgram)
|
||||||
|
self.menu_2.addAction(self.actionGitlink)
|
||||||
|
self.menu_2.addAction(self.actionGitee)
|
||||||
|
self.menu_2.addAction(self.actionGithub)
|
||||||
|
self.menu_2.addAction(self.action_IPv6)
|
||||||
|
self.menu_2.addAction(self.action_2)
|
||||||
|
self.menu_2.addAction(self.action_3)
|
||||||
|
self.menu_2.addAction(self.action)
|
||||||
|
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.getInfoButton.setText(_translate("MainWindow", "获取选中项介绍"))
|
||||||
|
self.getFen.setText(_translate("MainWindow", "获取/提交选中项的评分和评论"))
|
||||||
|
self.runBotton.setText(_translate("MainWindow", "安装"))
|
||||||
|
self.menu.setTitle(_translate("MainWindow", "程序"))
|
||||||
|
self.menu_2.setTitle(_translate("MainWindow", "切换源"))
|
||||||
|
self.about.setText(_translate("MainWindow", "关于"))
|
||||||
|
self.exitProgram.setText(_translate("MainWindow", "退出程序"))
|
||||||
|
self.help.setText(_translate("MainWindow", "帮助"))
|
||||||
|
self.openFile.setText(_translate("MainWindow", "打开本地部署脚本"))
|
||||||
|
self.actionGitlink.setText(_translate("MainWindow", "Gitlink 源(推荐)"))
|
||||||
|
self.actionGitee.setText(_translate("MainWindow", "Gitee 源"))
|
||||||
|
self.actionGithub.setText(_translate("MainWindow", "Github 源(国外用户推荐)"))
|
||||||
|
self.action_IPv6.setText(_translate("MainWindow", "备用源1(只限IPv6用户)"))
|
||||||
|
self.action.setText(_translate("MainWindow", "本地测试源(127.0.0.1)"))
|
||||||
|
self.action_2.setText(_translate("MainWindow", "备用源2"))
|
||||||
|
self.action_3.setText(_translate("MainWindow", "备用源3"))
|
||||||
|
|
|
@ -0,0 +1,199 @@
|
||||||
|
<?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="getInfoButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>获取选中项介绍</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="getFen">
|
||||||
|
<property name="text">
|
||||||
|
<string>获取/提交选中项的评分和评论</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</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">
|
||||||
|
<property name="title">
|
||||||
|
<string>程序</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="openFile"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="exitProgram"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenu" name="menu_2">
|
||||||
|
<property name="title">
|
||||||
|
<string>切换源</string>
|
||||||
|
</property>
|
||||||
|
<addaction name="actionGitlink"/>
|
||||||
|
<addaction name="actionGitee"/>
|
||||||
|
<addaction name="actionGithub"/>
|
||||||
|
<addaction name="action_IPv6"/>
|
||||||
|
<addaction name="action_2"/>
|
||||||
|
<addaction name="action_3"/>
|
||||||
|
<addaction name="action"/>
|
||||||
|
</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>
|
||||||
|
<action name="actionGitlink">
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Gitlink 源(推荐)</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionGitee">
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Gitee 源</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionGithub">
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Github 源(国外用户推荐)</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action_IPv6">
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>备用源1(只限IPv6用户)</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action">
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>本地测试源(127.0.0.1)</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action_2">
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>备用源2</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action_3">
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>备用源3</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -45,9 +45,9 @@ class APK:
|
||||||
def __init__(self, apkPath):
|
def __init__(self, apkPath):
|
||||||
self.apkPath = apkPath
|
self.apkPath = apkPath
|
||||||
def install(self):
|
def install(self):
|
||||||
os.system("pkexec /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(self.apkPath))
|
return os.system("uengine install --apk='{}'".format(self.apkPath))
|
||||||
def uninstall(self):
|
def uninstall(self):
|
||||||
os.system("pkexec /usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg='{}'".format(self.packageName()))
|
return os.system("uengine uninstall --pkg='{}'".format(self.packageName()))
|
||||||
def information(self):
|
def information(self):
|
||||||
return subprocess.getoutput("aapt dump badging '{}'".format(self.apkPath))
|
return subprocess.getoutput("aapt dump badging '{}'".format(self.apkPath))
|
||||||
def activityName(self):
|
def activityName(self):
|
||||||
|
@ -362,10 +362,11 @@ class UengineRunner:
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print("本 API 不支持直接运行,请通过引入的方式使用此 API")
|
print("本 API 不支持直接运行,请通过引入的方式使用此 API")
|
||||||
adb = Adb("192.168.250.2:5555")
|
#adb = Adb("192.168.250.2:5555")
|
||||||
print(adb.boolAndroidInstallOtherAppSetting())
|
#print(adb.boolAndroidInstallOtherAppSetting())
|
||||||
|
|
||||||
quit()
|
quit()
|
||||||
|
|
||||||
if not ROOT.GetRoot():
|
if not ROOT.GetRoot():
|
||||||
print("请获取 ROOT 权限以便更好的使用该 API")
|
pass
|
||||||
|
#print("请获取 ROOT 权限以便更好的使用该 API")
|
|
@ -5,7 +5,7 @@
|
||||||
"https://github.com/gfdgd-xi/uengine-runner",
|
"https://github.com/gfdgd-xi/uengine-runner",
|
||||||
"https://gitlink.org.cn/gfdgd_xi/uengine-runner"
|
"https://gitlink.org.cn/gfdgd_xi/uengine-runner"
|
||||||
],
|
],
|
||||||
"Version": "1.8.3",
|
"Version": "2.0.0",
|
||||||
"System": "Linux(deepin/UOS)",
|
"System": "Linux(deepin/UOS)",
|
||||||
"Tips": [
|
"Tips": [
|
||||||
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis 或程序的更多帮助",
|
"更多可见:https://gitee.com/gfdgd-xi/uengine-runner/wikis 或程序的更多帮助",
|
||||||
|
@ -23,6 +23,16 @@
|
||||||
"5、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
"5、如果想要使用adb连接UEngine或其他手机,请使用 1.2.0 以前的版本。(如需连接UEngine请安装adb补丁)"
|
||||||
],
|
],
|
||||||
"Update": [
|
"Update": [
|
||||||
|
"<b>V2.0.0:</b>",
|
||||||
|
"※1、内置微型应用商店,支持评论、评分功能;",
|
||||||
|
"※2、修复 UEngine 安装器在 Wayland 下无法正常运行的问题;",
|
||||||
|
"※3、更新 UEngine 安装器安装的 UEngine 版本;",
|
||||||
|
"※4、修复 UEngine 安装器安装后的 UEngine 无法正常安装 APK 的问题(包括从运行器和 deb 包安装);",
|
||||||
|
"※5、UEngine 安装器安装后的 UEngine 支持开机后自动加载运行环境,无需人手动打开终端运行;",
|
||||||
|
"6、更改程序论坛网址;",
|
||||||
|
"7、新增程序评分功能;",
|
||||||
|
"8、……",
|
||||||
|
"",
|
||||||
"<b>V1.8.3:</b>",
|
"<b>V1.8.3:</b>",
|
||||||
"※1、修复安装/打包程序时出现找不到图标的问题;",
|
"※1、修复安装/打包程序时出现找不到图标的问题;",
|
||||||
"※2、修复部分无法正确获取程序中文名和 Activity 的问题;",
|
"※2、修复部分无法正确获取程序中文名和 Activity 的问题;",
|
||||||
|
@ -205,7 +215,7 @@
|
||||||
"11、deepin 终端",
|
"11、deepin 终端",
|
||||||
"……"
|
"……"
|
||||||
],
|
],
|
||||||
"Time": "2022年12月18日",
|
"Time": "2023年01月13日",
|
||||||
"Contribute": [
|
"Contribute": [
|
||||||
"<b>感谢以下用户提供的问题、建议、图标、代码等,如果有遗漏,请及时与开发者联系添加,以及如果侵犯到您的合法权益,也及时与开发者联系:</p>",
|
"<b>感谢以下用户提供的问题、建议、图标、代码等,如果有遗漏,请及时与开发者联系添加,以及如果侵犯到您的合法权益,也及时与开发者联系:</p>",
|
||||||
"<hr>",
|
"<hr>",
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/bash
|
||||||
|
export XDG_SESSION_TYPE=x11
|
||||||
|
export QT_QPA_PLATFORM=xcb
|
||||||
|
unset WAYLAND_DISPLAYCOPY
|
|
@ -18,6 +18,7 @@ import random
|
||||||
import zipfile
|
import zipfile
|
||||||
import traceback
|
import traceback
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import updatekiller
|
||||||
import PyQt5.QtGui as QtGui
|
import PyQt5.QtGui as QtGui
|
||||||
import PyQt5.QtCore as QtCore
|
import PyQt5.QtCore as QtCore
|
||||||
import PyQt5.QtWidgets as QtWidgets
|
import PyQt5.QtWidgets as QtWidgets
|
||||||
|
@ -484,10 +485,10 @@ widget.setLayout(widgetLayout)
|
||||||
window.setWindowTitle(title)
|
window.setWindowTitle(title)
|
||||||
window.setCentralWidget(widget)
|
window.setCentralWidget(widget)
|
||||||
window.setWindowIcon(QtGui.QIcon(iconPath))
|
window.setWindowIcon(QtGui.QIcon(iconPath))
|
||||||
window.resize(window.frameSize().width() * 1.3, window.frameSize().height() * 1.1)
|
window.resize(int(window.frameSize().width() * 1.3), int(window.frameSize().height() * 1.1))
|
||||||
try:
|
try:
|
||||||
combobox1.setCurrentText(sys.argv[1])
|
combobox1.setCurrentText(sys.argv[1])
|
||||||
except:
|
except:
|
||||||
print("无参数")
|
print("无参数")
|
||||||
window.show()
|
window.show()
|
||||||
sys.exit(app.exec_())
|
sys.exit(app.exec_())
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import updatekiller
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
if sys.argv[1] == "--help":
|
if sys.argv[1] == "--help":
|
||||||
print("帮助:")
|
print("帮助:")
|
||||||
|
@ -8,4 +9,4 @@ if len(sys.argv) > 1:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
sys.exit(os.system("sudo /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(sys.argv[1])))
|
sys.exit(os.system("sudo /usr/bin/uengine-session-launch-helper -- uengine install --apk='{}'".format(sys.argv[1])))
|
||||||
print("命令参数错误")
|
print("命令参数错误")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
from modulefinder import packagePathMap
|
from modulefinder import packagePathMap
|
||||||
import sys
|
import sys
|
||||||
import ttkthemes
|
import ttkthemes
|
||||||
|
import updatekiller
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
import tkinter.ttk as ttk
|
import tkinter.ttk as ttk
|
||||||
|
|
||||||
|
@ -31,4 +32,4 @@ def main():
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
sys.exit(main())
|
sys.exit(main())
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import updatekiller
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
if sys.argv[1] == "--help":
|
if sys.argv[1] == "--help":
|
||||||
print("帮助:")
|
print("帮助:")
|
||||||
|
@ -8,4 +9,4 @@ if len(sys.argv) > 1:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
sys.exit(os.system("sudo /usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg='{}'".format(sys.argv[1])))
|
sys.exit(os.system("sudo /usr/bin/uengine-session-launch-helper -- uengine uninstall --pkg='{}'".format(sys.argv[1])))
|
||||||
print("命令参数错误")
|
print("命令参数错误")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import updatekiller
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
if sys.argv[1] == "--help":
|
if sys.argv[1] == "--help":
|
||||||
print("帮助:")
|
print("帮助:")
|
||||||
|
@ -8,4 +9,4 @@ if len(sys.argv) > 1:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
print("参数错误")
|
print("参数错误")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
sys.exit(os.system("sudo rm -rf /data/uengine"))
|
sys.exit(os.system("sudo rm -rf /data/uengine"))
|
||||||
|
|
|
@ -1,39 +1,84 @@
|
||||||
#/bin/bash
|
#/bin/bash
|
||||||
is_tar_checked="0"
|
# 在 Shenmo 制作的脚本的基础上进行了修改,修复在 Wayland 下运行错误和无法安装程序的问题
|
||||||
|
# 建议在 Ubuntu 22.04 及以上版本安装,最好在此之前先安装星火应用商店并将系统和星火应用商店更新到最新版本
|
||||||
|
#is_tar_checked="0"
|
||||||
rm -rf /tmp/uengine
|
rm -rf /tmp/uengine
|
||||||
until [ "$is_tar_checked" = "1" ];do
|
# 不再从网盘下载,直接从 Gitlink 拉取安装包
|
||||||
|
#until [ "$is_tar_checked" = "1" ];do
|
||||||
#echo "请拖入uengine.tar.xz并回车确认,可在 https://cowtransfer.com/s/44656ada129e42 下载获取。"
|
#echo "请拖入uengine.tar.xz并回车确认,可在 https://cowtransfer.com/s/44656ada129e42 下载获取。"
|
||||||
#read tar_path
|
#read tar_path
|
||||||
mkdir -p /tmp/uengine
|
mkdir -p /tmp/uengine
|
||||||
aria2c -x 16 -s 16 -d /tmp/uengine -o uenginetar.xz https://code.gitlink.org.cn/gfdgd_xi/uengine-installer/raw/branch/master/uenginetar.xz
|
# 区分是下载 Root 镜像还是普通镜像
|
||||||
|
if[[ $1 == "SuperSU" ]]; then
|
||||||
|
aria2c -x 16 -s 16 -d /tmp/uengine -o uenginetar.xz https://code.gitlink.org.cn/gfdgd_xi/uengine-installer/raw/branch/master/uengine2.1.2.2007-supersu.tar.xz
|
||||||
|
else
|
||||||
|
aria2c -x 16 -s 16 -d /tmp/uengine -o uenginetar.xz https://code.gitlink.org.cn/gfdgd_xi/uengine-installer/raw/branch/master/uengine2.1.2.2007.tar.xz
|
||||||
|
fi
|
||||||
tar_path="/tmp/uengine/uenginetar.xz"
|
tar_path="/tmp/uengine/uenginetar.xz"
|
||||||
tar_path=`echo "$tar_path" | sed $'s/\'//g'`
|
tar_path=`echo "$tar_path" | sed $'s/\'//g'`
|
||||||
|
# 忽略md5校验
|
||||||
#echo "路径为 $tar_path"
|
#echo "路径为 $tar_path"
|
||||||
tar_md5sum=`md5sum $tar_path`
|
#tar_md5sum=`md5sum $tar_path`
|
||||||
tar_md5sum=`echo ${tar_md5sum%%/*}`
|
#tar_md5sum=`echo ${tar_md5sum%%/*}`
|
||||||
|
# 忽略 md5 校验
|
||||||
|
#if [ "$tar_md5sum" = "5668b6bb54d28406e527989348126982" ];then
|
||||||
|
#is_tar_checked="1"
|
||||||
|
#else
|
||||||
|
#echo $tar_md5sum
|
||||||
|
#echo "md5完整性检查失败,请检查是否是这个文件"
|
||||||
|
#sleep 3
|
||||||
|
#reset
|
||||||
|
#fi
|
||||||
|
#done
|
||||||
|
|
||||||
if [ "$tar_md5sum" = "5668b6bb54d28406e527989348126982" ];then
|
#echo "完整性检查通过,开始部署。部署过程会需要root权限,完成后会要求重启。请注意不要在安装过程中安装或卸载其他软件"
|
||||||
is_tar_checked="1"
|
echo "开始部署。部署过程会需要root权限,完成后会要求重启。请注意不要在安装过程中安装或卸载其他软件"
|
||||||
else
|
|
||||||
echo $tar_md5sum
|
|
||||||
echo "md5完整性检查失败,请检查是否是这个文件"
|
|
||||||
sleep 3
|
|
||||||
reset
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "完整性检查通过,开始部署。部署过程会需要root权限,完成后会要求重启。请注意不要在安装过程中安装或卸载其他软件"
|
|
||||||
cd /tmp
|
cd /tmp
|
||||||
tar -xf "$tar_path"
|
tar -xf "$tar_path"
|
||||||
mkdir -p $HOME/uengine
|
# 移除包内旧版的run_daemon.sh(如果有的话)
|
||||||
mkdir -p $HOME/uengine-launch
|
aria2c -x 16 -s 16 -d /tmp -o run_daemon.sh https://code.gitlink.org.cn/gfdgd_xi/uengine-installer-bak/raw/branch/master/run_daemon.sh
|
||||||
cp /tmp/uengine/run_daemon.sh $HOME/uengine-launch
|
if [[ $? == 0 ]]; then
|
||||||
cp /tmp/uengine/launch_uengine.sh $HOME/uengine-launch
|
# 如果下载成功,就使用下载好的 run_daemon.sh
|
||||||
|
if [[ -f /tmp/run_daemon.sh ]]; then
|
||||||
|
rm -rfv /tmp/uengine/run_daemon.sh
|
||||||
|
mv -v /tmp/run_daemon.sh /tmp/uengine/run_daemon.sh
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# 拷贝到每个用户目录
|
||||||
|
for username in $(ls /home)
|
||||||
|
do
|
||||||
|
echo /home/$username
|
||||||
|
sudo mkdir -p /home/$username/uengine
|
||||||
|
sudo mkdir -p /home/$username/uengine-launch
|
||||||
|
sudo cp /tmp/uengine/run_daemon.sh /home/$username/uengine-launch
|
||||||
|
# 赋予可执行权限
|
||||||
|
sudo chmod +x /home/$username/uengine-launch/run_daemon.sh
|
||||||
|
#cp /tmp/uengine/launch_uengine.sh $username/uengine-launch
|
||||||
|
done
|
||||||
|
# 单独拷贝一份到 /usr/bin 下以做到每次开机自动化调用
|
||||||
|
sudo cp /tmp/uengine/run_daemon.sh /usr/bin/uengine-loading-ubuntu
|
||||||
|
sudo chmod 755 /usr/bin/uengine-loading-ubuntu
|
||||||
|
#mkdir -p $HOME/uengine
|
||||||
|
#mkdir -p $HOME/uengine-launch
|
||||||
|
#cp /tmp/uengine/run_daemon.sh $HOME/uengine-launch
|
||||||
|
#cp /tmp/uengine/launch_uengine.sh $HOME/uengine-launch
|
||||||
cd /tmp/uengine
|
cd /tmp/uengine
|
||||||
/tmp/uengine/install.sh
|
/tmp/uengine/install.sh
|
||||||
sudo apt install -y libkf5globalaccel5 libqt5multimedia5 libqt5sensors5 libegl1-mesa-dev
|
# 安装所需依赖
|
||||||
echo "重启后在$HOME/uengine-launch执行launch_uengine.sh即可打开uengine守护进程。随后即可安装和使用安卓应用"
|
sudo apt install -y libkf5globalaccel5 libqt5multimedia5 libqt5sensors5 libegl1-mesa-dev
|
||||||
|
# 用于修复 UEngine 在 Ubuntu 无法安装 APK 的问题
|
||||||
|
sudo mkdir -p /var/lib/uengine
|
||||||
|
sudo ln -s /data/uengine/data/data/ /var/lib/uengine/data
|
||||||
|
# 拷贝快捷方式
|
||||||
|
cd `dirname $0`
|
||||||
|
sudo cp uengine-loading-ubuntu.desktop /usr/share/applications
|
||||||
|
sudo cp uengine-loading-ubuntu.desktop /etc/xdg/autostart
|
||||||
|
sudo chmod 755 /etc/xdg/autostart/uengine-loading-ubuntu.desktop
|
||||||
|
# echo "重启后在$HOME/uengine-launch执行launch_uengine.sh即可打开uengine守护进程。随后即可安装和使用安卓应用"
|
||||||
|
# 这里直接运行 run_daemon.sh,运行 launch_uengine.sh 好像不行
|
||||||
|
echo "重启后在$HOME/uengine-launch执行run_daemon.sh或在启动器手动运行或执行命令uengine-loading-ubuntu即可打开uengine守护进程。随后即可安装和使用安卓应用"
|
||||||
echo "你需要在每次启动安卓应用之前打开这个脚本。打开后可安全关闭"
|
echo "你需要在每次启动安卓应用之前打开这个脚本。打开后可安全关闭"
|
||||||
|
echo "不过一般情况下会自动开启,无需手动启动。"
|
||||||
echo "按回车重启"
|
echo "按回车重启"
|
||||||
read
|
read
|
||||||
reboot
|
reboot
|
||||||
|
|
|
@ -14,6 +14,7 @@ import traceback
|
||||||
import ttkthemes
|
import ttkthemes
|
||||||
import pyautogui
|
import pyautogui
|
||||||
import threading
|
import threading
|
||||||
|
import updatekiller
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
import tkinter.ttk as ttk
|
import tkinter.ttk as ttk
|
||||||
import tkinter.messagebox as messagebox
|
import tkinter.messagebox as messagebox
|
||||||
|
@ -238,4 +239,4 @@ keys.start()
|
||||||
threading.Thread(target=ShowTips).start()
|
threading.Thread(target=ShowTips).start()
|
||||||
pyautogui.FAILSAFE = False
|
pyautogui.FAILSAFE = False
|
||||||
threading.Thread(target=RestartProgramTimer).start()
|
threading.Thread(target=RestartProgramTimer).start()
|
||||||
window.mainloop()
|
window.mainloop()
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Categories=System;
|
||||||
|
Comment=启动 UEngine 环境(默认会开机自启动)
|
||||||
|
Encoding=UTF-8
|
||||||
|
Exec=bash /usr/bin/uengine-loading-ubuntu
|
||||||
|
Icon=/opt/apps/com.gitee.uengine.runner.spark/files/defult.svg
|
||||||
|
MimeType=
|
||||||
|
Name=手动启动 UEngine 环境(默认会开机自启动)
|
||||||
|
StartupWMClass=手动启动 UEngine 环境(默认会开机自启动)
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
|
@ -26,6 +26,7 @@ import traceback
|
||||||
import threading
|
import threading
|
||||||
import webbrowser
|
import webbrowser
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import updatekiller
|
||||||
map = True
|
map = True
|
||||||
import matplotlib
|
import matplotlib
|
||||||
import matplotlib.figure
|
import matplotlib.figure
|
||||||
|
@ -1099,7 +1100,7 @@ class UpdateWindow():
|
||||||
updateWidgetLayout = QtWidgets.QGridLayout()
|
updateWidgetLayout = QtWidgets.QGridLayout()
|
||||||
versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本:未知\n更新内容:")
|
versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本:未知\n更新内容:")
|
||||||
updateText = QtWidgets.QTextBrowser()
|
updateText = QtWidgets.QTextBrowser()
|
||||||
ok = QtWidgets.QPushButton("更新(更新过程中会关闭所有Python应用,包括这个应用)")
|
ok = QtWidgets.QPushButton("更新(更新过程中会关闭这个应用的所有进程)")
|
||||||
ok.clicked.connect(UpdateWindow.Update)
|
ok.clicked.connect(UpdateWindow.Update)
|
||||||
cancel = QtWidgets.QPushButton("取消")
|
cancel = QtWidgets.QPushButton("取消")
|
||||||
cancel.clicked.connect(UpdateWindow.update.close)
|
cancel.clicked.connect(UpdateWindow.update.close)
|
||||||
|
@ -1134,8 +1135,8 @@ class UpdateWindow():
|
||||||
write_txt("/tmp/uengine-runner/update.sh", f"""#!/bin/bash
|
write_txt("/tmp/uengine-runner/update.sh", f"""#!/bin/bash
|
||||||
echo 删除多余的安装包
|
echo 删除多余的安装包
|
||||||
rm -rfv /tmp/uengine-runner/update/*
|
rm -rfv /tmp/uengine-runner/update/*
|
||||||
echo 关闭“UEngine 运行器”以及其它“Python 应用”
|
echo 关闭“UEngine 运行器”
|
||||||
killall python3
|
python3 {programPath}/updatekiller.py
|
||||||
echo 下载安装包
|
echo 下载安装包
|
||||||
wget -P /tmp/uengine-runner/update {UpdateWindow.data["Url"][0]}
|
wget -P /tmp/uengine-runner/update {UpdateWindow.data["Url"][0]}
|
||||||
echo 安装安装包
|
echo 安装安装包
|
||||||
|
@ -1494,13 +1495,14 @@ aaptVersion = GetCommandReturn("aapt version")
|
||||||
SystemVersion = GetSystemVersion()
|
SystemVersion = GetSystemVersion()
|
||||||
iconPath = "{}/runner.svg".format(os.path.split(os.path.realpath(__file__))[0])
|
iconPath = "{}/runner.svg".format(os.path.split(os.path.realpath(__file__))[0])
|
||||||
about = f'''<p align="center"><img width=256 src="{iconPath}"/></p>
|
about = f'''<p align="center"><img width=256 src="{iconPath}"/></p>
|
||||||
<p>介绍 :一个基于 Python3 的 PyQt5 制作的 UEngine 运行器,在新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。</p>
|
<p>介绍:一个基于 Python3 的 PyQt5 制作的 UEngine 运行器,在新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。</p>
|
||||||
<p>版本 :{version}</p>
|
<p>版本:{version}</p>
|
||||||
<p>适用平台 :{goodRunSystem}</p>
|
<p>适用平台:{goodRunSystem}</p>
|
||||||
<p>Qt 版本 :{QtCore.qVersion()}</p>
|
<p>Qt 版本:{QtCore.qVersion()}</p>
|
||||||
<p>程序官网 :{programUrl}</p>
|
<p>程序官网:{programUrl}</p>
|
||||||
<p>系统版本 : {SystemVersion}</p>
|
<p>系统版本:{SystemVersion}</p>
|
||||||
<h3>©2021-{time.strftime("%Y")}</h3>'''
|
<p>主要开发者:gfdgd xi、为什么您不喜欢熊出没和阿布呢</p>
|
||||||
|
<h1>©2021-{time.strftime("%Y")} RacoonGX 团队</h1>'''
|
||||||
updateThingsString = ""
|
updateThingsString = ""
|
||||||
tips = ""
|
tips = ""
|
||||||
contribute = ""
|
contribute = ""
|
||||||
|
@ -1689,7 +1691,8 @@ if not os.path.exists("/usr/bin/uengine"):
|
||||||
else:
|
else:
|
||||||
#QtWidgets.QMessageBox.critical(None, "错误", "请安装 UEngine 后继续")
|
#QtWidgets.QMessageBox.critical(None, "错误", "请安装 UEngine 后继续")
|
||||||
#sys.exit(0)
|
#sys.exit(0)
|
||||||
if QtWidgets.QMessageBox.question(None, "提示", "您的电脑没有安装 UEngine,是否安装 UEngine 以便更好的使用\n这里将会使用 shenmo 提供的脚本进行安装\n安装完后重新启动该程序即可\n提示:无法保证此安装脚本安装的 UEngine 可以使用") == QtWidgets.QMessageBox.Yes:
|
#if QtWidgets.QMessageBox.question(None, "提示", "您的电脑没有安装 UEngine,是否安装 UEngine 以便更好的使用\n这里将会使用 shenmo 提供的脚本进行安装\n安装完后重新启动该程序即可\n提示:无法保证此安装脚本安装的 UEngine 可以使用") == QtWidgets.QMessageBox.Yes:
|
||||||
|
if QtWidgets.QMessageBox.question(None, "提示", "您的电脑没有安装 UEngine,是否安装 UEngine 以便更好的使用\n这里将会安装移植版本(之前由 Shenmo 编写)\n安装完后重新启动该程序即可\n提示:需要在 Ubuntu 22.04 及以上版本才能正常安装") == QtWidgets.QMessageBox.Yes:
|
||||||
os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath}/uengine-installer'\"")
|
os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"bash '{programPath}/uengine-installer'\"")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
@ -1712,6 +1715,7 @@ FrmInstall = QtWidgets.QGridLayout()
|
||||||
BtnFindApk = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["BtnFindApk"])
|
BtnFindApk = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["BtnFindApk"])
|
||||||
BtnInstall = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["BtnInstall"])
|
BtnInstall = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["BtnInstall"])
|
||||||
BtnShowUengineApp = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["BtnShowUengineApp"])
|
BtnShowUengineApp = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["BtnShowUengineApp"])
|
||||||
|
BtnAppStore = QtWidgets.QPushButton("微型应用商店")
|
||||||
BtnUninstall = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["BtnUninstall"])
|
BtnUninstall = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["BtnUninstall"])
|
||||||
Btngeticon = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["Btngeticon"])
|
Btngeticon = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["Btngeticon"])
|
||||||
BtnSaveApk = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["BtnSaveApk"])
|
BtnSaveApk = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["BtnSaveApk"])
|
||||||
|
@ -1720,6 +1724,7 @@ BtnApkInformation = QtWidgets.QPushButton(langFile[lang]["Main"]["MainWindow"]["
|
||||||
FrmInstallWidget.setLayout(FrmInstall)
|
FrmInstallWidget.setLayout(FrmInstall)
|
||||||
FrmInstallWidget.setSizePolicy(size)
|
FrmInstallWidget.setSizePolicy(size)
|
||||||
BtnShowUengineApp.setSizePolicy(size)
|
BtnShowUengineApp.setSizePolicy(size)
|
||||||
|
BtnAppStore.setSizePolicy(size)
|
||||||
ComboInstallPath.setEditable(True)
|
ComboInstallPath.setEditable(True)
|
||||||
ComboInstallPath.addItems(findApkHistory)
|
ComboInstallPath.addItems(findApkHistory)
|
||||||
ComboInstallPath.setEditText("")
|
ComboInstallPath.setEditText("")
|
||||||
|
@ -1743,11 +1748,13 @@ BtnUninstall.clicked.connect(ButtonClick8)
|
||||||
Btngeticon.clicked.connect(SaveIconToOtherPath)
|
Btngeticon.clicked.connect(SaveIconToOtherPath)
|
||||||
BtnSaveApk.clicked.connect(SaveInstallUengineApp)
|
BtnSaveApk.clicked.connect(SaveInstallUengineApp)
|
||||||
BtnApkInformation.clicked.connect(ApkInformation.ShowWindows)
|
BtnApkInformation.clicked.connect(ApkInformation.ShowWindows)
|
||||||
|
BtnAppStore.clicked.connect(lambda: threading.Thread(target=os.system, args=[f"python3 '{programPath}/AutoConfig.py'"]).start())
|
||||||
# 布局控件
|
# 布局控件
|
||||||
widgetLayout.addWidget(LabApkPath, 0, 0, 1, 2)
|
widgetLayout.addWidget(LabApkPath, 0, 0, 1, 3)
|
||||||
widgetLayout.addWidget(ComboInstallPath, 1, 0, 1, 2)
|
widgetLayout.addWidget(ComboInstallPath, 1, 0, 1, 3)
|
||||||
widgetLayout.addWidget(BtnShowUengineApp, 2, 0, 1, 1)
|
widgetLayout.addWidget(BtnShowUengineApp, 2, 0, 1, 1)
|
||||||
widgetLayout.addWidget(FrmInstallWidget, 0, 2, 3, 1)
|
widgetLayout.addWidget(BtnAppStore, 2, 1, 1, 1)
|
||||||
|
widgetLayout.addWidget(FrmInstallWidget, 0, 3, 3, 1)
|
||||||
FrmInstall.addWidget(BtnFindApk, 0, 0, 1, 1)
|
FrmInstall.addWidget(BtnFindApk, 0, 0, 1, 1)
|
||||||
FrmInstall.addWidget(BtnInstall, 0, 1, 1, 1)
|
FrmInstall.addWidget(BtnInstall, 0, 1, 1, 1)
|
||||||
FrmInstall.addWidget(BtnUninstall, 1, 0, 1, 1)
|
FrmInstall.addWidget(BtnUninstall, 1, 0, 1, 1)
|
||||||
|
@ -1938,17 +1945,23 @@ uengineRunnerSearch = QtWidgets.QAction("查询指定程序在 UEngine 的运行
|
||||||
helpUengineRunnerBugUpload = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2])
|
helpUengineRunnerBugUpload = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][2])
|
||||||
helpShowHelp = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][4])
|
helpShowHelp = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][4])
|
||||||
helpRunnerUpdate = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][3])
|
helpRunnerUpdate = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][3])
|
||||||
|
helpFen = QtWidgets.QAction("程序评分")
|
||||||
helpAbout = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][1])
|
helpAbout = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][1])
|
||||||
helpAboutQt = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][5])
|
helpAboutQt = QtWidgets.QAction(langFile[lang]["Main"]["MainWindow"]["Menu"][3]["Menu"][5])
|
||||||
help.addAction(helpOpenProgramUrl)
|
help.addAction(helpOpenProgramUrl)
|
||||||
help.addAction(uengineRunnerSearch)
|
help.addAction(uengineRunnerSearch)
|
||||||
help.addAction(makerWebsize)
|
help.addAction(makerWebsize)
|
||||||
help.addAction(helpForum)
|
help.addAction(helpForum)
|
||||||
|
help.addSeparator()
|
||||||
help.addAction(helpUengineRunnerBugUpload)
|
help.addAction(helpUengineRunnerBugUpload)
|
||||||
|
help.addSeparator()
|
||||||
help.addAction(helpShowHelp)
|
help.addAction(helpShowHelp)
|
||||||
help.addAction(helpRunnerUpdate)
|
help.addAction(helpRunnerUpdate)
|
||||||
|
help.addAction(helpFen)
|
||||||
|
help.addSeparator()
|
||||||
help.addAction(helpAbout)
|
help.addAction(helpAbout)
|
||||||
help.addAction(helpAboutQt)
|
help.addAction(helpAboutQt)
|
||||||
|
help.addSeparator()
|
||||||
hm1 = help.addMenu("更多生态适配应用")
|
hm1 = help.addMenu("更多生态适配应用")
|
||||||
hm1_1 = QtWidgets.QAction("运行 Windows 应用:Wine 运行器")
|
hm1_1 = QtWidgets.QAction("运行 Windows 应用:Wine 运行器")
|
||||||
hm1.addAction(hm1_1)
|
hm1.addAction(hm1_1)
|
||||||
|
@ -1957,10 +1970,11 @@ hm1_1.triggered.connect(lambda: webbrowser.open_new_tab("https://gitee.com/gfdgd
|
||||||
helpOpenProgramUrl.triggered.connect(OpenProgramURL)
|
helpOpenProgramUrl.triggered.connect(OpenProgramURL)
|
||||||
uengineRunnerSearch.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io/uengine-runner-info/"))
|
uengineRunnerSearch.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io/uengine-runner-info/"))
|
||||||
makerWebsize.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io"))
|
makerWebsize.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io"))
|
||||||
helpForum.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgdxi.flarum.cloud/"))
|
helpForum.triggered.connect(lambda: webbrowser.open_new_tab("https://bbs.racoongx.cn/"))
|
||||||
helpUengineRunnerBugUpload.triggered.connect(UengineRunnerBugUpload)
|
helpUengineRunnerBugUpload.triggered.connect(UengineRunnerBugUpload)
|
||||||
helpShowHelp.triggered.connect(ShowHelp)
|
helpShowHelp.triggered.connect(ShowHelp)
|
||||||
helpRunnerUpdate.triggered.connect(UpdateWindow.ShowWindow)
|
helpRunnerUpdate.triggered.connect(UpdateWindow.ShowWindow)
|
||||||
|
helpFen.triggered.connect(lambda: threading.Thread(target=os.system, args=[f"'{programPath}/ProgramFen.py'"]).start())
|
||||||
helpAbout.triggered.connect(showhelp)
|
helpAbout.triggered.connect(showhelp)
|
||||||
helpAboutQt.triggered.connect(lambda: QtWidgets.QMessageBox.aboutQt(widget))
|
helpAboutQt.triggered.connect(lambda: QtWidgets.QMessageBox.aboutQt(widget))
|
||||||
# 设置窗口
|
# 设置窗口
|
||||||
|
|
|
@ -16,6 +16,7 @@ import time
|
||||||
import json
|
import json
|
||||||
import ttkthemes
|
import ttkthemes
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import updatekiller
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
import tkinter.ttk as ttk
|
import tkinter.ttk as ttk
|
||||||
|
|
||||||
|
@ -167,4 +168,4 @@ def showhelp():
|
||||||
print(windowflag)
|
print(windowflag)
|
||||||
helpwindow.mainloop()
|
helpwindow.mainloop()
|
||||||
#helpwindow.protocol("WM_DELETE_WINDOW", on_closing)
|
#helpwindow.protocol("WM_DELETE_WINDOW", on_closing)
|
||||||
showhelp()
|
showhelp()
|
||||||
|
|
|
@ -6,6 +6,7 @@ import base64
|
||||||
import requests
|
import requests
|
||||||
import traceback
|
import traceback
|
||||||
import webbrowser
|
import webbrowser
|
||||||
|
import updatekiller
|
||||||
import urllib.parse as parse
|
import urllib.parse as parse
|
||||||
import PyQt5.QtGui as QtGui
|
import PyQt5.QtGui as QtGui
|
||||||
import PyQt5.QtWidgets as QtWidgets
|
import PyQt5.QtWidgets as QtWidgets
|
||||||
|
@ -50,7 +51,7 @@ def OpenGitlinkIssues():
|
||||||
webbrowser.open_new_tab("https://www.gitlink.org.cn/gfdgd_xi/uengine-runner/issues")
|
webbrowser.open_new_tab("https://www.gitlink.org.cn/gfdgd_xi/uengine-runner/issues")
|
||||||
|
|
||||||
def OpenProgramForum():
|
def OpenProgramForum():
|
||||||
webbrowser.open_new_tab("https://gfdgdxi.flarum.cloud/t/bugs")
|
webbrowser.open_new_tab("https://bbs.racoongx.cn/t/bugs")
|
||||||
|
|
||||||
# 获取用户主目录
|
# 获取用户主目录
|
||||||
def get_home()->"获取用户主目录":
|
def get_home()->"获取用户主目录":
|
||||||
|
@ -108,4 +109,4 @@ window.setCentralWidget(widget)
|
||||||
window.setWindowTitle(f"UEngine 运行器 {version} 问题/建议反馈")
|
window.setWindowTitle(f"UEngine 运行器 {version} 问题/建议反馈")
|
||||||
window.setWindowIcon(QtGui.QIcon(iconPath))
|
window.setWindowIcon(QtGui.QIcon(iconPath))
|
||||||
window.show()
|
window.show()
|
||||||
sys.exit(app.exec_())
|
sys.exit(app.exec_())
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
import updatekiller
|
||||||
import PyQt5.QtWidgets as QtWidgets
|
import PyQt5.QtWidgets as QtWidgets
|
||||||
########################
|
########################
|
||||||
#
|
#
|
||||||
|
@ -69,4 +70,4 @@ try:
|
||||||
except:
|
except:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
QtWidgets.QMessageBox.information(None, "错误", traceback.format_exc())
|
QtWidgets.QMessageBox.information(None, "错误", traceback.format_exc())
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
|
@ -3,6 +3,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import shutil
|
import shutil
|
||||||
import traceback
|
import traceback
|
||||||
|
import updatekiller
|
||||||
|
|
||||||
def Add():
|
def Add():
|
||||||
try:
|
try:
|
||||||
|
@ -41,4 +42,4 @@ if __name__ == "__main__":
|
||||||
Del()
|
Del()
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
print("参数错误!")
|
print("参数错误!")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import atexit
|
||||||
|
|
||||||
|
PIDFILE = '/tmp/uengine-runner.pid'
|
||||||
|
|
||||||
|
#程序结束时清理pid
|
||||||
|
@atexit.register
|
||||||
|
def remove_pid():
|
||||||
|
with open(PIDFILE) as pidfile:
|
||||||
|
pidlst = pidfile.readlines()
|
||||||
|
pidlst.remove(str(PID)+'\n')
|
||||||
|
with open(PIDFILE,'w') as pidfile:
|
||||||
|
pidfile.writelines(pidlst)
|
||||||
|
|
||||||
|
#更新时结束进程
|
||||||
|
def main():
|
||||||
|
for i in open(PIDFILE):
|
||||||
|
try:
|
||||||
|
os.kill(int(i),15)
|
||||||
|
except ProcessLookupError:
|
||||||
|
pass
|
||||||
|
os.remove(PIDFILE)
|
||||||
|
|
||||||
|
#当该程序被直接执行时,执行结束进程操作。如果是导入的形式,则只是记录pid
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main())
|
||||||
|
else:
|
||||||
|
#获取进程pid,用于更新时结束进程
|
||||||
|
PID = os.getpid()
|
||||||
|
with open(PIDFILE,'a') as pidfile:
|
||||||
|
print(PID,file=pidfile) #使用print可以在行末输出换行符,而且可以省去类型转换
|
Loading…
Reference in New Issue