结束了

This commit is contained in:
gfdgd xi 2022-09-24 21:22:29 +08:00
parent 1ebca9d008
commit 665220af83
34 changed files with 4987 additions and 106 deletions

View File

@ -1,5 +1,5 @@
Package: spark-deepin-wine-runner
Version: 2.2.0-Alpha4
Version: 2.2.0-spark
Maintainer: gfdgd xi <3025613752@qq.com>, 为什么您不喜欢熊出没和阿布呢
Homepage: https://gitee.com/gfdgd-xi/deep-wine-runner, https://github.com/gfdgd-xi/deep-wine-runner, https://gitlink.org.cn/gfdgd_xi/deep-wine-runner
Architecture: all
@ -9,25 +9,30 @@ Recommends: winbind
Section: utils
Conflicts: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52
Replaces: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52
Installed-Size: 25152
Installed-Size: 26500
Description: gfdgd xi、为什么您不喜欢熊出没和阿布呢 制作的 wine 运行器
2.1.0-1 更新内容:
※1、删除多余图标
※2、修复将打包文件生成目录设置为 / 等重要目录导致删库的问题
3、修复了打包器浏览按钮闪退、生成的 postrm 有误的问题
4、支持在输入信息时自动生成 deb 保存路径
2.1.0 更新内容:
※1、新增新的 Wine 安装器,并支持将安装的 Wine 打包到 Wine 程序 deb 包中
※2、Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 内,可以不依赖 Wine一般不推荐把 Wine 打包入内,推荐用依赖的形式),并支持设置自定义依赖和生成模板
※3、开始初步多语言支持
※4、修复了在没有安装任何 Wine 的情况下使用高级功能导致程序闪退的问题
※5、支持云端自动获取数据配置 Wine 容器
※6、支持手动导入配置文件自动配置 Wine 容器
※7、新增从云端下载 Dll 的功能
※8、修复了 Dll 提取工具不会在 winecfg 中添加原装的问题
9、修改错别字图形话=>图形化)
10、修复评分功能名称为空也可以上传评分的问题
11、去除 toilet 依赖,使在 Deepin 23 Preview 上运行更佳
12、支持删除所有由 Wine 创建的启动器快捷方式
更新时间2022年08月26日
2.2.0 更新内容:
※1、Dll 提取工具支持 NT 6.X 及以上版本的 Dll 提取并优化了提示文本
※2、支持卸载后自动删除缓存/配置文件(删除配置文件只限 purge 参数删除)
※3、DEBUG 模式输出更多信息以方便调试(原本只输出 pid、Err
※4、支持安装 msi 文件
※5、修复无法正常评分的问题
※6、修复 QQ、TIM 安装后无法正常生成快捷方式的问题
※7、基于生态适配活动的打包器更换为 spark-wine-helper 以及添加自动删除残留脚本
※8、打包器支持从 deb 文件读取信息
※9、修复在 UOS 专业版(鲲鹏)无法正常运行的问题以及组件安装功能无法正常执行安装命令的问题
※10、修复出现星火应用商店和官方应用商店反复提示更新死循环的问题
※11、新增评分分数预测功能不准
※12、更换程序接口
13、更新组件安装的离线列表
14、不再强制依赖深度终端只做推荐安装
15、基于生态活动适配脚本的打包器在打包完成后会弹出对话框提示打包完成
16、优化打包器的 spark wine helper 依赖设置方式
17、新增 RegShot注册表比对工具
18、添加 Wine 运行器评分数据的搜索功能
以下更新内容旧版本也适用(只限 2.1.0 及以上版本):
※1、在“安装更多Wine”的Wine安装工具中上新 Wine
※2、云 Dll 工具上新 Dll
※3、VCPP、net 运行库安装工具新增运行库
更新时间2022年09月24日
作者gfdgd xi、为什么您不喜欢熊出没和阿布呢

View File

@ -1,4 +1,12 @@
#!/bin/sh
# 使用系统默认的 sh 运行
#################################################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本2.2.0
# 更新时间2022年09月24日
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 sh
#################################################################################################################
# 如果为非 X86 PC可以删除掉一些无用组件主要是用不了
if [ `arch` != "x86_64" ]; then
echo 非X86架构删除对非X86架构无用的组件
@ -24,4 +32,4 @@ fi
# 设置目录权限,让用户可读可写,方便后续删除组件
chmod 777 -R /opt/apps/deepin-wine-runner
# 向服务器返回安装数加1不显示内容且忽略错误
curl https://304626p927.goho.co/spark-deepin-wine-runner/Install.php?Version=2.1.0-2 -s > /dev/null | true
curl https://304626p927.goho.co/spark-deepin-wine-runner/Install.php?Version=2.2.0 -s > /dev/null | true

View File

@ -1,4 +1,12 @@
#!/bin/bash
# 使用系统默认的 sh 运行
#################################################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本2.2.0
# 更新时间2022年09月24日
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 sh
#################################################################################################################
# 删除软件残留,简单粗暴一点直接全部删掉,防止出现警告
# 加判断是为了怕 reinstall 后程序就再也打不开了(除非卸载后重新安装)
if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then

View File

@ -57,6 +57,7 @@ if __name__ == "__main__":
try:
apiReturn = json.loads(requests.get(f"https://s.pcmgr.qq.com/tapi/web/searchcgi.php?type=search&callback=searchCallback&keyword={parse.quote(search)}&page=1&pernum=30").text[:-2][15:])
except:
#traceback.print_exc()
input("无法连接服务器,按回车键继续")
CleanTerminal()
continue

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 37 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,723 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="266.66666"
height="417.33334"
viewBox="0 0 266.66666 417.33334"
sodipodi:docname="wine.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="860"
id="namedview4"
showgrid="false"
inkscape:zoom="0.56549519"
inkscape:cx="133.33333"
inkscape:cy="208.66667"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<image
width="266.66666"
height="417.33334"
preserveAspectRatio="none"
style="image-rendering:optimizeQuality"
xlink:href="data:image/png;base64,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
R7+HQhhyUwAAAABJRU5ErkJggg==
"
id="image10"
x="0"
y="0" />
<g
id="g730">
<path
style="fill:#d0d2ce;stroke-width:1.33333337"
d="m 92.666664,412.49675 c -22.954171,-3.58098 -30.778596,-14.60612 -19.048086,-26.84 4.967275,-5.18042 20.856717,-13.64206 31.618922,-16.8381 9.63398,-2.86098 12.87667,-5.17523 16.09741,-11.4884 C 127.0793,346.07031 126.09469,328.40417 118.36258,304 110.95405,280.6171 107.70677,276.39176 85.800497,261.63046 65.373321,247.86583 54.481644,233.94008 39.304342,202.18196 29.536814,181.74366 21.172665,158.19984 12.591519,126.98943 0.84914549,84.281329 0,79.540524 0,56.690593 V 36.02591 L 6.3333332,31.316358 C 22.14421,19.559175 46.031918,11.006282 73.513517,7.2627761 108.43885,2.505295 124.04993,2.5327026 133.40021,7.367916 c 4.39563,2.2730676 4.37557,2.2159326 13.79431,39.298751 17.07752,67.236453 21.34336,92.791603 21.36661,128.000003 0.0212,32.08644 -1.07559,37.03639 -14.46977,65.30535 -12.64748,26.693 -13.29463,28.86165 -12.33315,41.32976 1.84231,23.89062 9.33001,47.67791 18.1812,57.75884 9.46173,10.77632 9.75123,10.86308 38.72725,11.60605 24.36036,0.62463 26.42043,0.87688 32.66667,4 4.64306,2.32154 6.79736,4.25434 7.09721,6.36754 0.69527,4.89973 -3.79017,14.71264 -8.69261,19.01704 -13.38014,11.74792 -50.36891,24.30446 -88.17432,29.93248 -14.4709,2.15425 -42.095956,3.57402 -48.896946,2.51302 z M 136,374.72287 c 0,-2.32628 -11.7493,-8.26065 -15.47632,-7.81682 -5.10745,0.60822 -7.3272,4.65348 -3.93551,7.17205 C 119.51453,376.25114 136,376.79871 136,374.72287 Z M 51.679691,116.22618 c 1.31558,-0.83517 1.08943,-2.78171 -1.043252,-8.97958 -3.418626,-9.935012 -11.969773,-44.441492 -11.969773,-48.301678 0,-4.109388 -5.652855,-7.58132 -9.22818,-5.667864 -4.083669,2.185514 -4.533761,6.383486 -2.167481,20.215887 1.820376,10.641247 8.179527,37.158905 9.099825,37.946265 0.162709,0.13921 2.395836,1.52009 4.962502,3.06863 4.966883,2.99666 7.634769,3.43974 10.346359,1.71834 z m 30.034051,-6.33491 c 3.403829,-1.1598 8.575868,-4.42532 11.493418,-7.2567 5.628616,-5.46239 17.4595,-24.462697 17.4595,-28.039821 0,-1.170221 -1.41437,-6.282767 -3.14304,-11.361212 C 101.6695,46.035487 91.67234,29.134354 84.620635,24.513898 80.320951,21.696636 73.833983,21.800283 70.58772,24.738111 60.725792,33.663034 60.860693,71.194632 70.871416,103.66667 72.284401,108.25 73.909487,112 74.482719,112 c 0.573234,0 3.827194,-0.94893 7.231023,-2.10873 z"
id="path738"
inkscape:connector-curvature="0" />
<path
style="fill:#b2a3a3;stroke-width:1.33333337"
d="m 88.751799,406.58487 c -7.617476,-1.27485 -13.234381,-4.94736 -13.844536,-9.05197 -0.521841,-3.51051 -0.100306,-3.52907 6.275638,-0.27631 16.170021,8.24934 59.648479,6.0778 102.817099,-5.13518 8.43333,-2.19055 16.83333,-4.36606 18.66666,-4.83444 8.37208,-2.13895 -1.67196,2.3749 -14.66666,6.59129 -33.52208,10.87688 -76.95517,16.43756 -99.248201,12.70661 z M 227.44393,362.84562 c -0.57436,-0.92933 -0.68422,-2.04977 -0.24412,-2.48988 1.19329,-1.19328 2.49436,0.56173 1.84985,2.49527 -0.45163,1.35489 -0.76569,1.35384 -1.60573,-0.005 z m -99.06232,-7.19571 c 3.87166,-10.32902 2.09665,-30.72794 -4.55052,-52.29576 C 116.29709,278.90887 112.23243,273.6048 88.454803,257.1909 67.923297,243.01782 55.322716,226.39615 41.561698,195.33334 29.283254,167.61714 22.38137,145.71014 8.7259167,91.110524 0.34505092,57.600688 -1.018888,49.539947 0.86233554,44.637557 2.2307998,41.071397 4.7174999,48.334351 12.047914,77.307504 c 3.621596,14.314207 6.938303,27.283846 7.370459,28.821426 0.562345,2.00078 1.609649,2.63928 3.683682,2.24579 1.809496,-0.3433 5.972018,1.43921 11.082532,4.74586 7.271452,4.70483 8.446899,6.0906 10.535731,12.42087 4.483581,13.58765 15.098471,34.29834 15.237277,29.72943 0.02332,-0.76768 -2.357119,-8.53816 -5.28987,-17.26772 -3.603481,-10.72606 -4.893993,-16.31022 -3.980445,-17.22377 0.743504,-0.74351 6.05498,-1.75601 11.803278,-2.25 19.053813,-1.63743 28.851909,-8.53477 44.315922,-31.196055 11.60161,-17.001231 11.59935,-16.998534 17.73468,-21.162082 4.00052,-2.714829 6.78859,-3.504585 12.37217,-3.504585 10.9872,0 12.15413,1.776149 18.83408,28.666667 7.65581,30.818885 10.90553,54.101265 10.91311,78.186045 0.009,30.90418 -5.86434,54.13413 -18.59328,73.53018 -6.5956,10.0502 -18.59179,22.28378 -21.85138,22.28378 -1.0441,0 -6.01981,-1.5403 -11.05712,-3.42287 L 106,258.4876 l 6.85795,7.08954 c 7.83141,8.09585 9.42074,10.96145 14.28502,25.7562 5.07668,15.44074 8.79499,33.45173 8.82817,42.76248 0.0317,8.91217 -2.96843,19.4328 -6.31798,22.15492 -1.85149,1.50468 -2.02928,1.42067 -1.27155,-0.60083 z"
id="path736"
inkscape:connector-curvature="0" />
<path
style="fill:#9b1426;stroke-width:1.33333337"
d="M 113.08101,258.1579 C 97.91614,251.53683 90.951246,247.10835 81.533661,238.09918 61.040348,218.4946 43.052986,181.51824 28.722614,129.53628 c -2.698457,-9.78838 -4.593223,-18.11011 -4.210591,-18.49275 0.985491,-0.98549 8.984212,3.89018 10.318669,6.28981 0.611722,1.1 3.283159,8 5.936528,15.33333 9.692557,26.78812 31.088074,65.49743 40.135469,72.61411 4.899785,3.85417 7.810281,3.0265 7.586061,-2.15728 -0.09785,-2.2623 -4.466007,-13.49614 -9.707008,-24.9641 -11.297212,-24.7197 -22.991449,-54.07473 -22.110033,-55.50089 0.34451,-0.55743 4.084311,-1.42856 8.310669,-1.93584 17.087851,-2.05102 28.38197,-10.47289 42.605302,-31.770191 14.71566,-22.034469 21.57421,-26.896571 33.43538,-23.702691 5.55786,1.496573 5.60016,1.555742 8.90946,12.460297 7.82894,25.797325 13.52126,56.611385 14.86965,80.493385 1.51624,26.85516 -3.34305,55.05813 -12.66973,73.53417 -7.33574,14.532 -21.70942,30.96222 -27.04348,30.91275 -0.9656,-0.009 -6.36917,-2.03057 -12.00795,-4.49249 z"
id="path734"
inkscape:connector-curvature="0" />
<path
style="fill:#7a071a;stroke-width:1.33333337"
d="M 114.66666,256.932 C 98.161967,249.82235 93.686663,246.99467 83.252455,237.08319 67.880629,222.48146 56.883067,204.1257 44.439663,172.30172 38.120814,156.14127 26.303457,116.32766 27.145933,114.03776 c 0.576986,-1.56829 0.97237,-0.67005 9.667239,21.96224 12.726929,33.12754 32.614284,68.15434 48.732922,85.83134 6.601568,7.23982 7.657218,7.88096 13.97599,8.4881 5.917146,0.56856 7.247636,0.2331 9.907356,-2.498 1.68977,-1.73513 6.67124,-4.65477 11.06993,-6.4881 6.60079,-2.75115 8.61864,-4.39286 11.55327,-9.39962 6.72084,-11.46641 8.59316,-19.28594 8.60402,-35.93372 0.012,-18.71774 -1.03176,-24.47392 -5.64641,-31.13286 -10.10683,-14.58417 -25.83019,-22.78883 -37.669524,-19.65648 -8.154314,2.1574 -15.275519,7.07391 -19.506525,13.4674 C 75.897155,141.60512 73.799577,144 73.172912,144 c -1.158986,0 -10.506247,-17.61128 -10.506247,-19.79494 0,-0.65716 2.895971,-1.57901 6.435492,-2.04854 8.591852,-1.13975 18.450909,-6.22209 24.930943,-12.85188 2.915127,-2.9825 10.10023,-12.426382 15.9669,-20.986408 5.86666,-8.560025 12.70539,-16.933456 15.19717,-18.607623 5.32142,-3.575328 16.11668,-4.20628 19.20073,-1.122228 2.36203,2.362031 9.584,28.059555 13.72058,48.821179 11.77353,59.09167 3.72384,107.28883 -22.57906,135.19114 -4.52764,4.80296 -8.82622,8.71156 -9.55241,8.6858 -0.72619,-0.0258 -5.82035,-1.9853 -11.32035,-4.3545 z"
id="path732"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 57 KiB

View File

@ -48,7 +48,7 @@ def Download(wineBotton, dllName, urlPart, wine: str) -> bool:
except:
pass
os.system(f"aria2c -x 16 -s 16 -d '{wineBotton}/drive_c/windows/system32' -o '{dllName}' '{urlPart}'")
os.system(f"WINEPREFIX='{wineBotton}' '{wine}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(dllName)[0]} /d native /f")
os.system(f"WINEPREFIX='{wineBotton}' {wine} reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(dllName)[0]} /d native /f")
return 0
def exit():

View File

@ -65,7 +65,7 @@ except:
file = open(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt", "r")
version = file.read().replace("\n", "")
print("安装版本:", version)
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"")
if exitInputShow:
input("安装结束,按回车键退出")
exit()
@ -98,7 +98,7 @@ if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.m
print("缓存版本:", version.replace("/", ""))
print("已经缓存,使用本地版本")
file.close()
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"")
if exitInputShow:
input("安装结束,按回车键退出")
exit()
@ -109,7 +109,7 @@ os.system(f"rm -rf \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.
os.system("mkdir -p /tmp/winegeckomonoinstall")
os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}\" -o install.msi \"{programDownloadUrl}\"")
print("开始安装")
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i \"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi\"")
try:
if sys.argv[4] == "1":
print("写入缓存")

View File

@ -25,7 +25,7 @@ except:
def Download(wineBotton: str, id: int, wine: str):
os.system(f"aria2c -x 16 -s 16 -d \"/tmp/deepin-wine-runner-msxml/\" -o \"{msxmlList[id][2]}\" \"{msxmlList[id][1]}\"")
os.system(f"WINEPREFIX='{wineBotton}' '{wine}' msiexec /i \"/tmp/deepin-wine-runner-msxml/{msxmlList[id][2]}\"")
os.system(f"WINEPREFIX='{wineBotton}' {wine} msiexec /i \"/tmp/deepin-wine-runner-msxml/{msxmlList[id][2]}\"")
if __name__ == "__main__":
if "--help" in sys.argv:
@ -77,7 +77,7 @@ if __name__ == "__main__":
choice = (sys.argv[3] == "1")
if os.path.exists(f"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}") and choice:
print("已经缓存,使用本地版本")
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"")
input("安装结束,按回车键退出")
exit()
print("开始下载")
@ -85,5 +85,5 @@ if __name__ == "__main__":
os.system(f"mkdir -p \"{homePath}/.config/deepin-wine-runner/MSXML/\"")
os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.config/deepin-wine-runner/MSXML\" -o \"{msxmlList[choose][2]}\" \"{msxmlList[choose][1]}\"")
print("开始安装")
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i \"{homePath}/.config/deepin-wine-runner/MSXML/{msxmlList[choose][2]}\"")
input("安装结束,按回车键退出")

View File

@ -48,7 +48,7 @@ except:
def Download(wineBotton: str, id: int, wine: str):
programName = os.path.split(netList[id][1])[1]
os.system(f"aria2c -x 16 -s 16 -d \"/tmp/deepin-wine-runner-net\" -o \"{programName}\" \"{netList[id][1]}\"")
os.system(f"WINEPREFIX='{wineBotton}' '{wine}' '/tmp/deepin-wine-runner-net/{programName}'")
os.system(f"WINEPREFIX='{wineBotton}' {wine} '/tmp/deepin-wine-runner-net/{programName}'")
if __name__ == "__main__":
if "--help" in sys.argv:
@ -101,12 +101,12 @@ if __name__ == "__main__":
programName = os.path.split(netList[choose][1])[1]
if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/.netframework/{programName}") and choice:
print("已经缓存,使用本地版本")
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'")
input("安装结束,按回车键退出")
exit()
print("开始下载")
os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'")
os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/.netframework'")
os.system(f"aria2c -x 16 -s 16 -d \"{homePath}/.cache/deepin-wine-runner/.netframework\" -o \"{programName}\" \"{netList[choose][1]}\"")
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/.netframework/{programName}'")
input("安装结束,按回车键退出")

View File

@ -66,11 +66,11 @@ print(f"您选择了{msxmlList[choose][0]}")
if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}") and choice:
print("已经缓存,使用本地版本")
if msxmlList[choose][2] == "msi":
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'")
input("安装结束,按回车键退出")
sys.exit()
if msxmlList[choose][2] == "exe":
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'")
input("安装结束,按回车键退出")
sys.exit()
print("开始下载")
@ -79,12 +79,12 @@ os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/other'")
if msxmlList[choose][2] == "msi":
os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/other' -o '{msxmlList[choose][3]}' \"{msxmlList[choose][1]}\"")
print("开始安装")
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' msiexec /i '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} msiexec /i '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'")
print("安装结束")
sys.exit()
if msxmlList[choose][2] == "exe":
os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/other' -o '{msxmlList[choose][3]}' \"{msxmlList[choose][1]}\"")
print("开始安装")
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/other/{msxmlList[choose][3]}'")
input("安装结束,按回车键退出")
sys.exit()

View File

@ -38,7 +38,7 @@ def Download(wineBotton: str, id: int, wine: str) -> int:
except:
pass
os.system(f"aria2c -x 16 -s 16 -d '/tmp/deepin-wine-runner-vcpp' -o '{netList[id][2]}' \"{netList[id][1]}\"")
os.system(f"WINEPREFIX='{wineBotton}' '{wine}' '/tmp/deepin-wine-runner-vcpp/{netList[id][2]}'")
os.system(f"WINEPREFIX='{wineBotton}' {wine} '/tmp/deepin-wine-runner-vcpp/{netList[id][2]}'")
if __name__ == "__main__":
if "--help" in sys.argv:
@ -83,12 +83,12 @@ if __name__ == "__main__":
print(f"您选择了 Visual Studio C++ {netList[choose][0]}")
if os.path.exists(f"{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}"):
print("已经缓存,使用本地版本")
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'")
input("安装结束,按回车键退出")
exit()
print("开始下载")
os.system(f"rm -rf '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'")
os.system(f"mkdir -p '{homePath}/.cache/deepin-wine-runner/vcpp'")
os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/vcpp' -o '{netList[choose][2]}' \"{netList[choose][1]}\"")
os.system(f"WINEPREFIX='{sys.argv[1]}' '{sys.argv[2]}' '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'")
os.system(f"WINEPREFIX='{sys.argv[1]}' {sys.argv[2]} '{homePath}/.cache/deepin-wine-runner/vcpp/{netList[choose][2]}'")
input("安装结束,按回车键退出")

View File

@ -48,7 +48,7 @@ def Download(wineBotton, dllName, urlPart, wine: str) -> bool:
except:
pass
os.system(f"aria2c -x 16 -s 16 -d '{wineBotton}/drive_c/windows/system32' -o '{dllName}' '{urlPart}'")
os.system(f"WINEPREFIX='{wineBotton}' '{wine}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(dllName)[0]} /d native /f")
os.system(f"WINEPREFIX='{wineBotton}' {wine} reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(dllName)[0]} /d native /f")
return 0
def exit():

Binary file not shown.

View File

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,15 @@
[Setup]
Flag=1
ExtDir=
OutDir=
UseLongRegHead=0
[SkipRegKey]
0=
1=
2=
[SkipDir]
0=
1=
2=

View File

@ -215,7 +215,7 @@ class make_deb_threading(QtCore.QThread):
"Architecture": "i386",
"Depends": [
f"{wine[wineVersion.currentText()]}, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei",
f"{wine[wineVersion.currentText()]}, spark-dwine-helper (>= 1.6.2), fonts-wqy-microhei, fonts-wqy-zenhei"
f"{wine[wineVersion.currentText()]}, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei"
][int(chooseWineHelperValue.isChecked())],
"postinst": "",
"postrm": ["", f"""#!/bin/bash
@ -695,7 +695,7 @@ WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINE "$EXE" --disable-gpu &""",
print("c")
if os.path.exists(wine[wineVersion.currentText()]):
debInformation[0]["Depends"] = ["deepin-wine-helper (>= 5.1.30-1)",
"spark-dwine-helper (>= 1.6.2)"
"spark-dwine-helper | store.spark-app.spark-dwine-helper"
][int(chooseWineHelperValue.isChecked())] #+ ["", "libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0), ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses, deepin-wine-plugin-virtual\nRecommends: libcapi20-3, libcups2, libdbus-1-3, libfontconfig1, libfreetype6, libglu1-mesa | libglu1, libgnutls30 | libgnutls28 | libgnutls26, libgsm1, libgssapi-krb5-2, libjpeg62-turbo | libjpeg8, libkrb5-3, libodbc1, libosmesa6, libpng16-16 | libpng12-0, libsane | libsane1, libsdl2-2.0-0, libtiff5, libv4l-0, libxcomposite1, libxcursor1, libxfixes3, libxi6, libxinerama1, libxrandr2, libxrender1, libxslt1.1, libxxf86vm1"][]
print("d")
debInformation[0]["run.sh"] = f'''#!/bin/sh
@ -849,6 +849,7 @@ fi
if os.path.exists(wine[wineVersion.currentText()]):
shutil.copy(f"{programPath}/gtkGetFileNameDlg", f"{debPackagePath}/opt/apps/{e1_text.text()}/files/gtkGetFileNameDlg")
if wine[wineVersion.currentText()][-3:] == ".7z":
# 都有了为什么要打包呢?
shutil.copy(wine[wineVersion.currentText()], f"{debPackagePath}/opt/apps/{e1_text.text()}/files/wine_archive.7z")
else:
self.run_command(f"7z a '{debPackagePath}/opt/apps/{e1_text.text()}/files/wine_archive.7z' '{wine[wineVersion.currentText()]}/*'")
@ -856,7 +857,11 @@ fi
# 压缩容器
###############
self.label.emit("正在打包 wine 容器")
self.run_command("7z a {}/opt/apps/{}/files/files.7z {}/*".format(debPackagePath, e1_text.text(), b))
# 都有 7z 了为什么要打包呢?
if e1_text.text()[-3: ] == ".7z":
shutil.copy(e1_text.text(), f"{debPackagePath}/opt/apps/{e1_text.text()}/files/files.7z")
else:
self.run_command("7z a {}/opt/apps/{}/files/files.7z {}/*".format(debPackagePath, e1_text.text(), b))
###############
# 复制文件
###############
@ -1024,12 +1029,12 @@ def InstallDeb():
def ChangeWine():
useInstallWineArch.setEnabled(os.path.exists(wine[wineVersion.currentText()]))
debDepends.setText([f"{wine[wineVersion.currentText()]}, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei",
f"{wine[wineVersion.currentText()]}, spark-dwine-helper (>= 1.6.2), fonts-wqy-microhei, fonts-wqy-zenhei"
f"{wine[wineVersion.currentText()]}, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei"
][int(chooseWineHelperValue.isChecked())])
debRecommend.setText("")
if os.path.exists(wine[wineVersion.currentText()]):
debDepends.setText(["deepin-wine-helper (>= 5.1.30-1)",
"spark-dwine-helper (>= 1.6.2)"
"spark-dwine-helper | store.spark-app.spark-dwine-helper"
][int(chooseWineHelperValue.isChecked())])
if "deepin-wine5-stable" in wine[wineVersion.currentText()]:
debDepends.setText("libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0), ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses, deepin-wine-plugin-virtual")
@ -1067,12 +1072,178 @@ def UserPathSet():
return
change = True
def ReadDeb(unzip = False):
# 获取路径
debPath = QtWidgets.QFileDialog.getOpenFileName(window, "读取 deb 包", get_home(), "deb包(*.deb);;所有文件(*.*)")[0]
print(debPath)
# 分类讨论
path = f"/tmp/deb-unzip-{random.randint(0, 1000)}"
# 新建文件夹
os.system(f"mkdir -p '{path}'")
# 解包 control 文件
os.system(f"dpkg -e '{debPath}' '{path}/DEBIAN'")
# 读取 control 文件
file = open(f"{path}/DEBIAN/control", "r")
lists = file.read().splitlines()
# 控件映射表
lnkMap = {
"Package": e1_text,
"Version": e2_text,
"Description": e3_text,
"Maintainer": e4_text,
"Recommends": debRecommend,
"Depends": debDepends
}
for i in lists:
# 遍历文件
items = i.strip()
try:
lnkMap[items[:items.index(":")]].setText(items[items.index(":") + 1:].strip())
if unzip:
# 解压全部文件将不在 control 分析 wine 版本以提升运行效率
continue
print(items[:items.index(":")])
if items[:items.index(":")] == "Depends":
# 以下可以通过依赖判断使用什么 wine
depends = items[items.index(":") + 1:].strip().split(",")
for i in depends:
print(i)
# 读取
if "(" in i:
# 如果有括号(即版本号限制的情况)
temp = i.strip()
dependsItem = temp[:temp.index("(")]
else:
dependsItem = i.strip()
try:
# 这个 wine 是理论上用于运行的 wine
print(wineValue[dependsItem])
wineVersion.setCurrentText(wineValue[dependsItem])
break
except:
print("此 Wine 不存在")
except:
# 报错忽略
print(f"{items}”项忽略")
# 判断 postrm 文件是不是自动移除脚本
# postrm 文件不存在就不需要考虑
# 三个特征:
# 1、/home/$username/.deepinwine
# 2、非卸载跳过清理
# 3、清理卸载残留
# 都符合才算
rmBash.setChecked(False)
if os.path.exists(f"{path}/DEBIAN/postrm"):
# 读取文件进行特征筛查
file = open(f"{path}/DEBIAN/postrm", "r")
postrm = file.read()
if "/home/$username/.deepinwine" in postrm and "非卸载,跳过清理" in postrm and "清理卸载残留" in postrm:
rmBash.setChecked(True)
file.close()
# 解包主文件
if not unzip:
# 只解压 control 文件的话,结束
# 顺便删除临时文件
os.system(f"rm -rfv '{path}'")
return
os.system(f"dpkg -x '{debPath}' '{path}'")
# 读取文件
# 目前只能实现读取 Wine 运行器(生态适配脚本的也可以读取)打包的 deb
# opt/apps/XXX/files/run.sh 的文件读取识别
if not os.path.exists(f"{path}/opt/apps/"):
return
# 取默认第一个
package = os.listdir(f"{path}/opt/apps/")[0]
# 读 7z基本不读取
if os.path.exists(f"{path}/opt/apps/{package}/files/files.7z"):
e6_text.setText(f"{path}/opt/apps/{package}/files/files.7z")
lnkMap = {
"Icon": e9_text,
"Name": e8_text,
"MimeType": e10_text
}
# 读 desktop 文件
if os.path.exists(f"{path}/opt/apps/{package}/entries/applications"):
filePath = f"{path}/opt/apps/{package}/entries/applications/{os.listdir(f'{path}/opt/apps/{package}/entries/applications')[0]}"
file = open(filePath, "r")
items = file.read().splitlines()
file.close()
for i in items:
# 按行解析
if i.replace(" ", "").replace("\n", "") == "":
# 空行,忽略
continue
# 忽略注释
line = i
if "#" in line:
line = line[:line.index("#")]
# 判断是否合法
try:
name = line[:line.index("=")].strip()
value = line[line.index("=") + 1:]#.replace("\"", "").strip()
if name in lnkMap:
lnkMap[name].setText(value)
continue
# 其它的特殊情况判断
if name == "Exec":
value = value[value.index(".sh") + 3:].strip()
if value[0] == "\"":
value = value[1:].strip()
# helper
e15_text.setText(value)
if name == "Categories":
option1_text.setCurrentText(value)
except:
print(f"忽略行:{i}")
lnkMap = {
"BOTTLENAME": e5_text,
"EXEC_PATH": e7_text
#"APPRUN_CMD"
}
# 读 run.sh
if os.path.exists(f"{path}/opt/apps/{package}/files/run.sh"):
file = open(f"{path}/opt/apps/{package}/files/run.sh", "r")
items = file.read().splitlines()
file.close()
for i in items:
# 按行解析
if i.replace(" ", "").replace("\n", "") == "":
# 空行,忽略
continue
# 忽略 export
line = i.replace("export ", "")
# 忽略注释
if "#" in line:
line = line[:line.index("#")]
# 判断是否合法
try:
name = line[:line.index("=")].strip()
value = line[line.index("=") + 1:].replace("\"", "").strip()
#lnkMap[name].setText(value)
if name in lnkMap:
lnkMap[name].setText(value)
continue
# 其它的特殊情况判断
if name == "START_SHELL_PATH" and value == "/opt/deepinwine/tools/spark_run_v4.sh":
# helper
chooseWineHelperValue.setChecked(True)
if name == "APPRUN_CMD" and value in wineValue:
wineVersion.setCurrentText(wineValue[dependsItem])
except:
print(f"忽略行:{i}")
###############
# 程序信息
###############
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
# 如果要添加其他 wine请在字典添加其名称和执行路径
wine = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine6 stable": "deepin-wine6-stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine"}
wineValue = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5-stable": "deepin-wine5 stable", "deepin-wine6-stable": "deepin-wine6 stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine"}
# 读取 wine 本地列表
for i in ["/opt/wine-staging", "/opt/wine-dev", "/opt/wine-stable", "/opt/spark-wine7-devel"]:
if os.path.exists(i):
@ -1228,12 +1399,19 @@ e12_text.textChanged.connect(UserPathSet)
# 菜单栏
menu = window.menuBar()
programmenu = menu.addMenu(QtCore.QCoreApplication.translate("U", "程序"))
debMenu = menu.addMenu(QtCore.QCoreApplication.translate("U", "deb 包"))
help = menu.addMenu(QtCore.QCoreApplication.translate("U", "帮助"))
exit = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "退出程序"))
debE = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "只读取 Control 信息"))
debX = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "读取所有(需解包,时间较久)"))
tip = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "小提示"))
exit.triggered.connect(window.close)
tip.triggered.connect(helps)
programmenu.addAction(exit)
debMenu.addAction(debE)
debMenu.addAction(debX)
debE.triggered.connect(lambda: ReadDeb(False))
debX.triggered.connect(lambda: ReadDeb(True))
help.addAction(tip)
# 控件配置
try:
@ -1250,3 +1428,4 @@ window.setWindowIcon(QtGui.QIcon(iconPath))
window.resize(int(window.frameSize().width() * 2.1), window.frameSize().height())
window.show()
sys.exit(app.exec_())
# Flag解包只读control和解包全部读取

View File

@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行
#################################################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本2.0.0
# 更新时间2022年08月12
# 版本2.2.0
# 更新时间2022年09月24
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 Python3 的 PyQt5 构建
#################################################################################################################
@ -18,11 +18,11 @@ import base64
import shutil
import hashlib
import platform
import req as requests
import threading
import traceback
import webbrowser
import subprocess
import req as requests
import urllib.parse as parse
import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore
@ -36,7 +36,7 @@ def PythonLower():
# Python 版本检测,因为 f-string 格式化要至少 Python 3.6 及以上的版本,所以需要检测
# 判断主版本号
if sys.version_info[0] > 3:
if sys.version_info[0] < 3:
PythonLower()
if sys.version_info[1] < 6:
PythonLower()
@ -128,6 +128,7 @@ class QT:
e1.setEditText(findExeHistory[-1])
def DisableButton(things):
button_r_6.setDisabled(things)
button1.setDisabled(things)
button2.setDisabled(things)
button3.setDisabled(things)
@ -166,15 +167,7 @@ class Runexebutton_threading(QtCore.QThread):
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'")
if not os.path.exists(f"{programPath}/exagear"):
#self.run_command(f"aria2c -x 16 -s 16 -d \"{programPath}\" -o \"exagear.7z\" https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/other/exagear.7z")
if os.system(f"7z x \"{programPath}/exagear.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/exagear.7z")
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@ -295,7 +288,7 @@ def make_desktop_on_launcher():
else:
option += "WINEDEBUG=FIXME,ERR,WARN,TRACE,Message "
wineUsingOption = ""
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@ -357,7 +350,7 @@ def make_desktop_on_desktop():
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = ""
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@ -484,7 +477,7 @@ class RunWineProgramThread(QtCore.QThread):
os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'")
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = ""
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@ -548,7 +541,7 @@ class RunWinetricksThread(QtCore.QThread):
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = ""
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@ -581,7 +574,7 @@ def RunWinetricks():
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
DisableButton(False)
return
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@ -815,17 +808,30 @@ class UpdateWindow():
ok.clicked.connect(UpdateWindow.Update)
cancel = QtWidgets.QPushButton("取消")
cancel.clicked.connect(UpdateWindow.update.close)
try:
UpdateWindow.data = json.loads(requests.get(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL3VwZGF0ZS5qc29u").decode("utf-8")).text)
versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本{UpdateWindow.data['Version']}\n更新内容")
if UpdateWindow.data["Version"] == version:
updateText.setText(QtCore.QCoreApplication.translate("U", "此为最新版本,无需更新"))
ok.setDisabled(True)
if "从源码运行的版本" == programVersionType:
versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本未知从源码运行不提供更新\n更新内容")
updateText.setText("从源码运行不提供更新")
ok.setDisabled(True)
else:
if "deepin/UOS 应用商店版本<带签名>" == programVersionType:
url = "aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci91cGRhdGUtdW9zLmpzb24="
elif "星火应用商店版本" == programVersionType:
url = "aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci91cGRhdGUtc3BhcmsuanNvbg=="
else:
updateText.setText(UpdateWindow.data["New"].replace("\\n", "\n"))
except:
traceback.print_exc()
QtWidgets.QMessageBox.critical(updateWidget, QtCore.QCoreApplication.translate("U", "错误"), QtCore.QCoreApplication.translate("U", "无法连接服务器!"))
url = "aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci91cGRhdGUuanNvbg=="
try:
UpdateWindow.data = json.loads(requests.get(base64.b64decode(url).decode("utf-8")).text)
versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本{UpdateWindow.data['Version']}\n更新内容")
if UpdateWindow.data["Version"] == version:
updateText.setText(QtCore.QCoreApplication.translate("U", "此为最新版本,无需更新"))
ok.setDisabled(True)
else:
updateText.setText(UpdateWindow.data["New"].replace("\\n", "\n"))
except:
traceback.print_exc()
QtWidgets.QMessageBox.critical(updateWidget, QtCore.QCoreApplication.translate("U", "错误"), QtCore.QCoreApplication.translate("U", "无法连接服务器!"))
updateText.setText("无法连接服务器,无法更新")
ok.setDisabled(True)
updateWidgetLayout.addWidget(versionLabel, 0, 0, 1, 1)
updateWidgetLayout.addWidget(updateText, 1, 0, 1, 3)
updateWidgetLayout.addWidget(ok, 2, 2, 1, 1)
@ -1138,22 +1144,51 @@ class GetDllFromWindowsISO:
traceback.print_exc()
QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", traceback.format_exc())
choose = None
class ProgramRunStatusShow():
msgWindow = None
def ShowWindow():
global choose
choose = None
dateVersion = ""
if not os.path.exists(e2.currentText()):
QtWidgets.QMessageBox.information(widget, "提示", "您输入的 exe 不存在")
return
try:
sha = ProgramRunStatusUpload.GetSHA1(e2.currentText())
lists = json.loads(requests.get(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL2FwcC8=").decode("utf-8") + sha + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).text)
r = requests.get(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL2FwcC8=").decode("utf-8") + sha + base64.b64decode("L3RpdGxlLnR4dA==").decode("utf-8"))
lists = json.loads(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9hcHAv").decode("utf-8") + sha + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).text)
r = requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9hcHAv").decode("utf-8") + sha + base64.b64decode("L3RpdGxlLnR4dA==").decode("utf-8"))
r.encoding = "utf-8"
title = r.text
except:
if QtWidgets.QMessageBox.question(widget, QtCore.QCoreApplication.translate("U", "提示"), QtCore.QCoreApplication.translate("U", "暂时还没有该软件的运行情况信息\n是否自己上传该软件的运行情况")) == QtWidgets.QMessageBox.Yes:
choosemsg = QtWidgets.QMessageBox()
choosemsg.setText("""暂时还没有该软件的运行情况信息,请问需要?""")
choosemsg.setWindowTitle("提示")
def Choose(choices):
global choose
choose = choices
choosemsg.addButton("取消", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(0))
choosemsg.addButton("提交评分", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(1))
choosemsg.addButton("预测评分(不准确)", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(2))
choosemsg.exec_()
if choose == None or choose == 0:
return
if choose == 1:
ProgramRunStatusUpload.ShowWindow(sha)
return
return
if choose == 2:
try:
lists = [0, 0, 0, 0, 0, 0, 0, 0]
info = json.loads(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUwL0FJP1NIQTE9").decode("utf-8") + sha).text)
lists[int(info["Fen"])] = 1
dateVersion = info["Version"]
title = "null"
except:
traceback.print_exc()
QtWidgets.QMessageBox.critical(window, "错误", "无法获取预测数值")
return
informationList = [
"0分无法运行并且也没有报错自己无法解决",
"1分无法运行但有报错自己无法解决",
@ -1164,7 +1199,10 @@ class ProgramRunStatusShow():
"含有不良内容,不宜安装",
"含有病毒、木马等对计算机有害的软件"
]
if title.lower() == "null":
try:
if title.lower() == "null":
title = "未知应用"
except:
title = "未知应用"
maxHead = lists.index(max(lists))
ProgramRunStatusShow.msgWindow = QtWidgets.QMainWindow()
@ -1176,7 +1214,8 @@ class ProgramRunStatusShow():
msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "综合评价:")), 0, 0)
msgWidgetLayout.addLayout(starLayout, 0, 1)
msgWidgetLayout.addWidget(QtWidgets.QLabel(informationList[maxHead]), 1, 0, 1, 2)
msgWidgetLayout.addWidget(uploadButton, 2, 0, 1, 2)
msgWidgetLayout.addWidget(QtWidgets.QLabel("" if dateVersion == "" else f"数据版本:{dateVersion}"), 2, 0, 1, 2)
msgWidgetLayout.addWidget(uploadButton, 3, 0, 1, 2)
end = 5
if maxHead > 5:
for i in range(end):
@ -1542,7 +1581,7 @@ programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
try:
wine = {
"基于 box86 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ",
"基于 exagear 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/exagear' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ",
"基于 exagear 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ",
"deepin-wine6 stable": "deepin-wine6-stable",
"deepin-wine5 stable": "deepin-wine5-stable",
"spark-wine7-devel": "spark-wine7-devel",
@ -1585,7 +1624,7 @@ try:
value = f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 "
if os.path.exists("/opt/exagear/bin/ubt_x64a64_al"):
name = "基于 exagear 的 "
value = f"WINEPREDLL='{programPath}/exagear' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- "
value = f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- "
except:
pass
if os.path.exists(f"{programPath}/wine/{i}/bin/wine"):
@ -1627,9 +1666,91 @@ except:
QtWidgets.QMessageBox.critical(None, "错误", f"无法读取配置,无法继续\n{traceback.format_exc()}")
sys.exit(1)
def getFileFolderSize(fileOrFolderPath):
"""get size for file or folder"""
totalSize = 0
if not os.path.exists(fileOrFolderPath):
return totalSize
if os.path.isfile(fileOrFolderPath):
totalSize = os.path.getsize(fileOrFolderPath) # 5041481
return totalSize
if os.path.isdir(fileOrFolderPath):
with os.scandir(fileOrFolderPath) as dirEntryList:
for curSubEntry in dirEntryList:
curSubEntryFullPath = os.path.join(fileOrFolderPath, curSubEntry.name)
if curSubEntry.is_dir():
curSubFolderSize = getFileFolderSize(curSubEntryFullPath) # 5800007
totalSize += curSubFolderSize
elif curSubEntry.is_file():
curSubFileSize = os.path.getsize(curSubEntryFullPath) # 1891
totalSize += curSubFileSize
return totalSize
# 获取当前语言
def get_now_lang()->"获取当前语言":
return os.getenv('LANG')
def GetVersion():
global about
global programVersionType
# 目前分为几个版本(在 control 文件区分):
# 星火版本:~spark
# 商店版本:~uos
# 编译版本:无版本号
# Gitee/Github……正常版本
programVersionTypeLnk = {
"spark": "星火应用商店版本",
"uos": "deepin/UOS 应用商店版本<带签名>"
}
programVersionType = "从源码运行的版本"
try:
if not os.path.exists("/var/lib/dpkg/status"):
print("无 dpkg结束")
file = open("/var/lib/dpkg/status", "r")
fileName = file.read().splitlines()
package = False
for i in range(0, len(fileName)):
if fileName[i] == "Package: spark-deepin-wine-runner-52":
programVersionType = "吾爱专版"
window.setWindowTitle(f"{title} 吾爱专版")
break
if fileName[i] == "Package: spark-deepin-wine-runner":
package = True
continue
if not package:
continue
if fileName[i].replace(" ", "").replace("\n", "") == "":
# 空行,不再考虑
break
# 搜索版本号
try:
if fileName[i][:fileName[i].index(":")] == "Version":
version = fileName[i][fileName[i].index(":") + 1:].strip()
print(f"版本号为:{version}")
if not "-" in version:
programVersionType = "从Gitee/Github/Gitlink等平台获取的版本"
break
programVersionType = version[version.index("-") + 1:]
print(programVersionType)
if "-" in programVersionType:
# 考虑到如 2.1.0-2-spark 的情况
programVersionType = programVersionType[programVersionType.index("-") + 1:]
try:
programVersionType = programVersionTypeLnk[programVersionType]
except:
programVersionType = "从Gitee/Github/Gitlink等平台获取的版本"
break
except:
traceback.print_exc()
continue
except:
print("无法读取,当没有处理")
print(programVersionType)
about = about.replace("@VersionForType@", programVersionType)
# 获取程序体积
about = about.replace("@programSize@", str(int(getFileFolderSize(programPath) / 1024 / 1024)))
programVersionType = ""
print(wine)
###########################
# 程序信息
@ -1665,16 +1786,25 @@ updateThingsString = '''※1、Dll 提取工具支持 NT 6.X 及以上版本的
※5、修复无法正常评分的问题
※6、修复 QQ、TIM 安装后无法正常生成快捷方式的问题
※7、基于生态适配活动的打包器更换为 spark-wine-helper 以及添加自动删除残留脚本
8、更新组件安装的离线列表
9、不再强制依赖深度终端只做推荐安装
※8、打包器支持从 deb 文件读取信息
※9、修复在 UOS 专业版(鲲鹏)无法正常运行的问题以及组件安装功能无法正常执行安装命令的问题
※10、修复出现星火应用商店和官方应用商店反复提示更新死循环的问题
※11、新增评分分数预测功能不准
※12、更换程序接口
13、更新组件安装的离线列表
14、不再强制依赖深度终端只做推荐安装
15、基于生态活动适配脚本的打包器在打包完成后会弹出对话框提示打包完成
16、优化打包器的 spark wine helper 依赖设置方式
17、新增 RegShot注册表比对工具
18、添加 Wine 运行器评分数据的搜索功能
<b>以下更新内容旧版本也适用(只限 2.1.0 及以上版本)</b>
※1、在“安装更多Wine”的Wine安装工具中上 wine-staging 7.17、wine-staging 6.7、spark-wine7-devel 7.17
※1、在“安装更多Wine”的Wine安装工具中上新 Wine
※2、云 Dll 工具上新 Dll
※3、VCPP 运行库安装工具新增 VC6 运行库
※3、VCPP、net 运行库安装工具新增运行库
'''
for i in information["Thank"]:
thankText += f"{i}\n"
updateTime = "2022年09月11日"
updateTime = "2022年09月24日"
about = f'''<h1>关于</h1>
<p>一个能让Linux用户更加方便运行Windows应用的程序内置了对wine图形化的支持和各种Wine工具和自制Wine程序打包器、运行库安装工具等等</p>
<p>同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具可以做到只需要用户下载系统镜像并点击安装即可无需顾及虚拟机安装、创建、虚拟机的分区等等</p>
@ -1686,9 +1816,10 @@ about = f'''<h1>关于</h1>
让你可以简易方便的使用 wine
版本:{version}
适用平台:{goodRunSystem}
适用平台:{goodRunSystem}@VersionForType@
Qt 版本:{QtCore.qVersion()}
程序官网:{programUrl}</pre>
程序官网:{programUrl}
程序占用体积:@programSize@MB</pre>
<hr>
<h1>谢明名单</h1>
<pre>{thankText}</pre>
@ -1705,7 +1836,7 @@ Qt 版本:{QtCore.qVersion()}
title = "Wine 运行器 {}".format(version)
updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
try:
threading.Thread(target=requests.get, args=[parse.unquote(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL29wZW4vSW5zdGFsbC5waHA=").decode("utf-8")) + "?Version=" + version]).start()
threading.Thread(target=requests.get, args=[parse.unquote(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9vcGVuL0luc3RhbGwucGhw").decode("utf-8")) + "?Version=" + version]).start()
except:
pass
iconListUnBuild = [
@ -1740,6 +1871,9 @@ if not get_now_lang() == "zh_CN.UTF-8":
trans.load(f"{programPath}/LANG/deepin-wine-runner-en_US.qm")
app.installTranslator(trans)
window = QtWidgets.QMainWindow()
window.setWindowTitle(title)
# 异同步获取信息
threading.Thread(target=GetVersion).start()
widget = QtWidgets.QWidget()
window.setCentralWidget(widget)
mainLayout = QtWidgets.QGridLayout()
@ -1832,8 +1966,8 @@ programManager.addWidget(wineConfig, 3, 0, 1, 1)
fontAppStore = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "字体商店"))
fontAppStore.clicked.connect(FontAppStore)
programManager.addWidget(fontAppStore, 3, 2, 1, 1)
button_r_6 = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "安装自定义字体"))
button_r_6.clicked.connect(OpenWineFontPath)
button_r_6 = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "RegShot"))
button_r_6.clicked.connect(lambda: RunWineProgram(f"{programPath}/RegShot/regshot.exe"))
programManager.addWidget(button_r_6, 3, 4, 1, 1)
sparkWineSetting = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "星火wine配置"))
sparkWineSetting.clicked.connect(lambda: threading.Thread(target=os.system, args=["/opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"]).start())
@ -2126,7 +2260,6 @@ hm1_1.triggered.connect(lambda: webbrowser.open_new_tab("https://gitee.com/gfdgd
# 窗口设置
window.resize(widget.frameGeometry().width() * 2, widget.frameGeometry().height())
widget.setLayout(mainLayout)
window.setWindowTitle(title)
window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg"))
widget.show()
window.show()

View File

@ -1,5 +1,5 @@
{
"Version": "2.2.0-Alpha3",
"Version": "2.2.0",
"Thank": [
"感谢 @a2035274 @虚幻的早晨 https://bbs.deepin.org/post/238301",
"感谢 @zhangs https://bbs.deepin.org/post/227948",
@ -23,6 +23,10 @@
"感谢 @云的眼泪 @zhengjl 反馈的 2.0.0 发布忘记把安装包传蓝奏云的问题",
"感谢 @虚幻的早晨 提出的添加 DXVK、VKD3D 的功能VKD3D 暂未实现)",
"感谢 @以勒 修改 Dll 提取工具提示文本的建议",
"感谢 @历山居士 反馈的获取自动配置容器脚本工具无法正常加载数据的问题",
"感谢 @Nick @奋斗ing 反馈的 2.1.0-2 的快捷方式故障",
"感谢 @俊生鹏程 反馈的 2.1.0-2 及以前版本在鲲鹏运行 wine 错误的问题并积极测试,以及组件安装工具在 arm 架构的异常",
"感谢 @云的眼泪 反馈的 2.1.0-2 更新死循环的问题可见https://bbs.deepin.org/post/243241以及感谢 @神末shenmo @忘记、过去 和 @历山居士 的讨论",
"感谢统信在 Wine 生态适配活动中提供的打包脚本",
"也感谢 DXVK 的开发者开发了 DXVK 这个程序项目链接https://github.com/doitsujin/dxvk",
"也感谢 WineHQ 开发团队开发的 WineHQ项目网址https://dl.winehq.org/",

View File

@ -0,0 +1,33 @@
# 此库用于实现 52 版不连接程序服务器
import requests
unConnect = False
with open("/var/lib/dpkg/status", "r") as i:
unConnect = "Package: spark-deepin-wine-runner-52" in open("/var/lib/dpkg/status", "r").read()
if unConnect:
print("52专版将会无法连接服务器")
badUrl = [
"http://120.25.153.144",
"https://304626p927.goho.co",
"https://30x46269h2.goho.co"
]
class Respon:
text = ""
def get(url): # -> requests.Response:
if unConnect:
# 筛选 Url只有特定的 url 才会被拦截
for i in badUrl:
if i in url:
raise Exception("52专版不支持连接作者服务器")
return requests.get(url)
def post(url, data):
if unConnect:
# 筛选 Url只有特定的 url 才会被拦截
for i in badUrl:
if i in url:
raise Exception("52专版不支持连接作者服务器")
return requests.post(url, data)

View File

@ -14,7 +14,7 @@ import shutil
import sys
import json
import traceback
import req as requests
import requests
from PyQt5 import QtCore, QtGui, QtWidgets
# UI 布局(自动生成)

View File

@ -25,7 +25,7 @@
"感谢 @以勒 修改 Dll 提取工具提示文本的建议",
"感谢 @历山居士 反馈的获取自动配置容器脚本工具无法正常加载数据的问题",
"感谢 @Nick @奋斗ing 反馈的 2.1.0-2 的快捷方式故障",
"感谢 @俊生鹏程 反馈的 2.1.0-2 及以前版本在鲲鹏运行 wine 错误的问题并积极测试",
"感谢 @俊生鹏程 反馈的 2.1.0-2 及以前版本在鲲鹏运行 wine 错误的问题并积极测试,以及组件安装工具在 arm 架构的异常",
"感谢 @云的眼泪 反馈的 2.1.0-2 更新死循环的问题可见https://bbs.deepin.org/post/243241以及感谢 @神末shenmo @忘记、过去 和 @历山居士 的讨论",
"感谢统信在 Wine 生态适配活动中提供的打包脚本",
"也感谢 DXVK 的开发者开发了 DXVK 这个程序项目链接https://github.com/doitsujin/dxvk",

View File

@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行
#################################################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本2.0.0
# 更新时间2022年08月12
# 版本2.2.0
# 更新时间2022年09月24
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 Python3 的 PyQt5 构建
#################################################################################################################
@ -1787,14 +1787,16 @@ updateThingsString = '''※1、Dll 提取工具支持 NT 6.X 及以上版本的
6修复 QQTIM 安装后无法正常生成快捷方式的问题
7基于生态适配活动的打包器更换为 spark-wine-helper 以及添加自动删除残留脚本
8打包器支持从 deb 文件读取信息
9修复在 UOS 专业版鲲鹏无法正常运行的问题
9修复在 UOS 专业版鲲鹏无法正常运行的问题以及组件安装功能无法正常执行安装命令的问题
10修复出现星火应用商店和官方应用商店反复提示更新死循环的问题
11新增评分分数预测功能不准
12更新组件安装的离线列表
13不再强制依赖深度终端只做推荐安装
14基于生态活动适配脚本的打包器在打包完成后会弹出对话框提示打包完成
15优化打包器的 spark wine helper 依赖设置方式
16新增 RegShot注册表比对工具
12更换程序接口
13更新组件安装的离线列表
14不再强制依赖深度终端只做推荐安装
15基于生态活动适配脚本的打包器在打包完成后会弹出对话框提示打包完成
16优化打包器的 spark wine helper 依赖设置方式
17新增 RegShot注册表比对工具
18添加 Wine 运行器评分数据的搜索功能
<b>以下更新内容旧版本也适用只限 2.1.0 及以上版本</b>
1安装更多Wine的Wine安装工具中上新 Wine
2 Dll 工具上新 Dll
@ -1802,7 +1804,7 @@ updateThingsString = '''※1、Dll 提取工具支持 NT 6.X 及以上版本的
'''
for i in information["Thank"]:
thankText += f"{i}\n"
updateTime = "2022年09月22"
updateTime = "2022年09月24"
about = f'''<h1>关于</h1>
<p>一个能让Linux用户更加方便运行Windows应用的程序内置了对wine图形化的支持和各种Wine工具和自制Wine程序打包器运行库安装工具等等</p>
<p>同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具可以做到只需要用户下载系统镜像并点击安装即可无需顾及虚拟机安装创建虚拟机的分区等等</p>

Binary file not shown.