From f8678cea120772475abd761da4f9019b7e51e67e Mon Sep 17 00:00:00 2001 From: gfdgd_xi <3025613752@qq.com> Date: Sun, 2 Oct 2022 21:59:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=87=AA=E5=8A=A8=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E8=84=9A=E6=9C=AC=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AutoConfig.py | 4 +- AutoShell/command/disbledWinebottlecreatelink | 13 +++ AutoShell/command/disbledhttpproxy | 13 +++ AutoShell/command/disbledwinecrashdialog | 13 +++ AutoShell/command/enabledWinebottlecreatelink | 13 +++ AutoShell/command/enabledhttpproxy | 13 +++ AutoShell/command/enabledwinecrashdialog | 13 +++ AutoShell/command/killallwineserver | 13 +++ AutoShell/command/taskmgr | 13 +++ ConfigLanguareRunner-help.json | 41 +++++++ ConfigLanguareRunner.py | 102 +++++++++++++++++- .../ConfigLanguareRunner.cpython-37.pyc | Bin 13262 -> 17013 bytes __pycache__/InstallDll.cpython-37.pyc | Bin 4005 -> 3981 bytes mainwindow.py | 7 +- req/__pycache__/__init__.cpython-37.pyc | Bin 1075 -> 1075 bytes 15 files changed, 250 insertions(+), 8 deletions(-) create mode 100755 AutoShell/command/disbledWinebottlecreatelink create mode 100755 AutoShell/command/disbledhttpproxy create mode 100755 AutoShell/command/disbledwinecrashdialog create mode 100755 AutoShell/command/enabledWinebottlecreatelink create mode 100755 AutoShell/command/enabledhttpproxy create mode 100755 AutoShell/command/enabledwinecrashdialog create mode 100755 AutoShell/command/killallwineserver create mode 100755 AutoShell/command/taskmgr create mode 100644 ConfigLanguareRunner-help.json diff --git a/AutoConfig.py b/AutoConfig.py index 19372ff..a4e72c6 100755 --- a/AutoConfig.py +++ b/AutoConfig.py @@ -64,7 +64,7 @@ class Connect: return # 判断版本以启动对应的解释器 # 做到新旧兼容 - if "$(" in things: + if "($" in things: print("a") OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '/tmp/wine-runner-auto-config.wsh' --system") # 执行脚本 @@ -86,7 +86,7 @@ class Connect: traceback.print_exc() # 判断版本以启动对应的解释器 # 做到新旧兼容 - if "$(" in things: + if "($" in things: OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '{path[0]}' --system") # 执行脚本 OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/AutoShell/main.py' '{path[0]}'") diff --git a/AutoShell/command/disbledWinebottlecreatelink b/AutoShell/command/disbledWinebottlecreatelink new file mode 100755 index 0000000..1bf2fba --- /dev/null +++ b/AutoShell/command/disbledWinebottlecreatelink @@ -0,0 +1,13 @@ +#!/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")) \ No newline at end of file diff --git a/AutoShell/command/disbledhttpproxy b/AutoShell/command/disbledhttpproxy new file mode 100755 index 0000000..1bf2fba --- /dev/null +++ b/AutoShell/command/disbledhttpproxy @@ -0,0 +1,13 @@ +#!/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")) \ No newline at end of file diff --git a/AutoShell/command/disbledwinecrashdialog b/AutoShell/command/disbledwinecrashdialog new file mode 100755 index 0000000..1bf2fba --- /dev/null +++ b/AutoShell/command/disbledwinecrashdialog @@ -0,0 +1,13 @@ +#!/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")) \ No newline at end of file diff --git a/AutoShell/command/enabledWinebottlecreatelink b/AutoShell/command/enabledWinebottlecreatelink new file mode 100755 index 0000000..1bf2fba --- /dev/null +++ b/AutoShell/command/enabledWinebottlecreatelink @@ -0,0 +1,13 @@ +#!/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")) \ No newline at end of file diff --git a/AutoShell/command/enabledhttpproxy b/AutoShell/command/enabledhttpproxy new file mode 100755 index 0000000..1bf2fba --- /dev/null +++ b/AutoShell/command/enabledhttpproxy @@ -0,0 +1,13 @@ +#!/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")) \ No newline at end of file diff --git a/AutoShell/command/enabledwinecrashdialog b/AutoShell/command/enabledwinecrashdialog new file mode 100755 index 0000000..1bf2fba --- /dev/null +++ b/AutoShell/command/enabledwinecrashdialog @@ -0,0 +1,13 @@ +#!/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")) \ No newline at end of file diff --git a/AutoShell/command/killallwineserver b/AutoShell/command/killallwineserver new file mode 100755 index 0000000..1bf2fba --- /dev/null +++ b/AutoShell/command/killallwineserver @@ -0,0 +1,13 @@ +#!/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")) \ No newline at end of file diff --git a/AutoShell/command/taskmgr b/AutoShell/command/taskmgr new file mode 100755 index 0000000..1bf2fba --- /dev/null +++ b/AutoShell/command/taskmgr @@ -0,0 +1,13 @@ +#!/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")) \ No newline at end of file diff --git a/ConfigLanguareRunner-help.json b/ConfigLanguareRunner-help.json new file mode 100644 index 0000000..42a05d3 --- /dev/null +++ b/ConfigLanguareRunner-help.json @@ -0,0 +1,41 @@ +{ + "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参数介绍:无" +} \ No newline at end of file diff --git a/ConfigLanguareRunner.py b/ConfigLanguareRunner.py index 2b1c65f..f0ef5cd 100755 --- a/ConfigLanguareRunner.py +++ b/ConfigLanguareRunner.py @@ -13,6 +13,7 @@ import time import json import platform import traceback +import subprocess import PyQt5.QtWidgets as QtWidgets # 读取文本文档 def readtxt(path): @@ -25,6 +26,7 @@ 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["Thank"]: thankText += f"{i}\n" programEnv = [ @@ -97,7 +99,17 @@ class Command(): "winver", "changeversion", "stopdll", - "cat" + "cat", + "taskmgr", + "control", + "killall", + "killallwineserver", + "enabledhttpproxy", + "disbledhttpproxy", + "enabledwinecrashdialog", + "disbledwinecrashdialog", + "disbledWinebottlecreatelink", + "enabledWinebottlecreatelink" ] def __init__(self, commandString: str) -> None: @@ -321,6 +333,64 @@ class Command(): print("文件读取错误") Debug() + def Taskmgr(self): + self.command = ["bat", "taskmgr"] + return self.Bat() + + def Control(self): + self.command = ["bat", "control"] + return self.Bat() + + def Killall(self): + 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"] + self.Bat() + + def DisbledWineBottleCreateLink(self): + self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\DllOverrides", "/v", "winemenubuilder.exe", "/f"] + self.Bat() + + def DisbledWineCrashDialog(self): + self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\WineDbg", "/v", "ShowCrashDialog", "/t", "REG_DWORD", "/d", "00000000", "/f"] + self.Bat() + + def EnabledWineCrashDialog(self): + self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\WineDbg", "/v", "ShowCrashDialog", "/t", "REG_DWORD", "/d", "00000001", "/f"] + 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"] + self.Bat() + + 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"] + self.Bat() + # 可以运行的命令的映射关系 # 可以被使用的命令的映射 commandList = { @@ -352,11 +422,21 @@ class Command(): "winver": Winver, "changeversion": ChangeVersion, "stopdll": StopDll, - "cat": Cat + "cat": Cat, + "taskmgr": Taskmgr, + "control": Control, + "killallwineserver": KillallWineServer, + "enabledhttpproxy": EnabledHttpProxy, + "disbledhttpproxy": DisbledHttpProxy, + "enabledwinecrashdialog": EnabledWineCrashDialog, + "disbledwinecrashdialog": DisbledWineCrashDialog, + "disbledWinebottlecreatelink": DisbledWineBottleCreateLink, + "enabledWinebottlecreatelink": EnabledWineBottleCreateLink } # 参数数列表 commandInfo = { + "killall": [1], "installdll": [1], "installfont": [1], "installsparkcorefont": [0], @@ -385,7 +465,16 @@ class Command(): "winver": [0], "changeversion": [1], "stopdll": [1], - "cat": [1] + "cat": [1], + "taskmgr": [0], + "control": [0], + "killallwineserver": [0], + "enabledhttpproxy": [2], + "disbledhttpproxy": [0], + "enabledwinecrashdialog": [0], + "disbledwinecrashdialog": [0], + "disbledWinebottlecreatelink": [0], + "enabledWinebottlecreatelink": [0] } windowsUnrun = [ "createbotton", @@ -432,6 +521,13 @@ class Command(): 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("参数不足") diff --git a/__pycache__/ConfigLanguareRunner.cpython-37.pyc b/__pycache__/ConfigLanguareRunner.cpython-37.pyc index affb5a67b6bd8dae8c936adebf5b958c56a10829..3230c7e4cc14ecd5f4a46100351cc189e29996a3 100644 GIT binary patch delta 6891 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 HaQ1%zECQ1h delta 3762 zcmb7GeN0@(5r6yc-S-Cvhk@hZ0P}Gi20I_dI2f?O#x{hZpJ-*Znr~$-`(%Gk8J8+^i&YbV(5un${Mv2g{sta zQHk1^GGQOlq#FM<6VNJY0I-T_OPiJz7*(UbxGP!)n!U7`mQWw8E(5tB zt&TgQ<+O&@g0mF|6k3;~n=dMK^Sm1MGwV_%BVz&Zt%_CC`f+u^#8s+9gR}wZg~ zR&Y$^TZa_pXZ1NCHn4`JMtGW*6=Q2Zj-;J_W!Xev zpeVf5vaCp5;iWChAQe&4K>}}S+9T2!vJ|3?%V5q4C9NJu2Ogb|{GXmY+*C@QQo@gk zLDL^eiKx>aUzyZ?Nl2&Yuml~|kpFw&$zBkrEyFwF)lrR^AuVdIscI&-w=YIU@k?v4}rsPHx( zgJ!(<0MB?(#-JPW2F;iw-xwQjV-3D>=Z-M#rG0cS-ADWBetLi&qyzL2eUcuAI%;8C zSS$RU^vG3>4$`9#m^L~Dp%@ks?;-FF9Jgrw(+U0C;<~qv>=1wU{)FrjqL^Dcz*#;d zoFxJC5DdS!vZcgCfVa(ezVZMN@)pignJLDfLBXd1!h}nW;zOT{{6O6CU1&tXu*#*b z!zgE818iyB1Ms$3D5VE?!6z2&3q)2&b%i|%dR|J{G&2Axi0ROjf4Nk%Y$`aVwenrVO>mS z)Q3Ks`D=TJhTaF8>cpSQpX`=STJpYCCkL6npT|<{T!xQ-nX~ul96_Bf$NJJ=iCo3_ z;Hpa3D*Z@yI+c8=E{0KgAbLpqKu!+*i-mq79@+Grtvo_y1aY z!wE>tYPGf7M#EOV9{077a|;OMZP|%rLTA(ZeabEeY~-e}2dEpj$ea3N`q~Ly3b@H1 zR;~o@5citaRc14}C4N?&tL%YAVUyIzWkzaanMB&q0C_!fCi7R344!H(cm(3o+_1(+ zaU4eoA#C)}ZjHovI+2dw6`q>YZC|}KY8&ARJuwnX-nZUr?&mziKNIiPOt;|bdn7cg zhH4E<*S#?n>H;_Chw*f+T3;-C=5u9bqPCShFLy>CIR}s`9C_PBGNzAac&d=zS!5qX z=tby5=tq!B58(*+3!67?h14SeQSslpfMpy;_Y_gH`Bpmyk%s~Dnx058I5nM*;s|4k zya!Uo1vH0fsh=%$603PAHkoBb;zs>DLuftPJgc?Q+7R!?sn(XM4c#%p@QcA%t!rub z1KVJ=`NWNe=~7e*H7147ZsV-YreiE#B}N+c5?Sz4;2RqR#J?Loq*lD&R4LxtZWXOf zr@l(??IsUt0KpNNlYHYYHcKRthKAQH213t%kqwEHNVAdAc&oS>`UpD3Tg|CqnWH3c zVrj|)V9=~-wsTw9UZ@l-4SpP9-D;W0)?^~9(*!S^rF6t-qO!BR81|4y#HH|eVV6)# zs7m@PPftT_W`r^T>_=j(r5eOuX$h&}YVmRVWuv~wI{LhF;d-s^5I^tmS9w%LnN#PK z)5@F)kSvhtdvj!;vOrFLw(`%83euw6=CpZ2wF+fU8S~6(l=$(x2N1q=2;_{Jdhx@7 z7K_vqyU2O*!zXHT=Oe&7I~Bn-USrK1e0sd#oO8mef50j;wJceHugb4P>opT<(TnGt z^F+7PBG^Og!u2J*bVxZ{3ZJJ6+-4<%vaWe2xO|Uvb4-&-OwQXk7H%)U`sv~?KDqv; z%6r5>=K-RN#m?=yE<@zg*Dn0!^>;pb@6zp`uFR@!kB5Eh*F_=G_JU~M$ytmZO($pi z(^In9@HCJ&RGlnBS#Xocz{@A^I+sY(%(?6{X+D|GJ4Z69R4h%gf%X?pc0Y>R5b(&t zt_@YXekgcvVggO&%~P@DB#T-`&cxDj#*c_McQre90{eC7!r8;()~关于

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

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

diff --git a/req/__pycache__/__init__.cpython-37.pyc b/req/__pycache__/__init__.cpython-37.pyc index 68a4567818785be80eab1e0f5e267aa445ca220a..9c8368ca7a64a8e28cae9ca95abcbfe9a67e6b00 100644 GIT binary patch delta 20 acmdnYv6+M0iI