Compare commits

...

134 Commits

Author SHA1 Message Date
d929107117 4.1.6
Some checks failed
Auto Building Wine Runner / deb (push) Has been cancelled
Auto Building Wine Runner / rpm (push) Has been cancelled
Auto Building Wine Runner / pkg (push) Has been cancelled
Building Wine Runner Off-line Pages / amd64 (push) Has been cancelled
Building Wine Runner Off-line Pages / arm64 (push) Has been cancelled
Building Wine Runner Off-line Pages / loongarch64 (push) Has been cancelled
2025-05-05 16:05:44 +08:00
6d56abbb28 修复Mono/Gecko安装器无法正常下载Mono/Gecko的问题 2025-05-05 16:04:09 +08:00
a76191da3a 补个更新日志
Some checks failed
Auto Building Wine Runner / deb (push) Has been cancelled
Auto Building Wine Runner / rpm (push) Has been cancelled
Auto Building Wine Runner / pkg (push) Has been cancelled
Building Wine Runner Off-line Pages / amd64 (push) Has been cancelled
Building Wine Runner Off-line Pages / arm64 (push) Has been cancelled
Building Wine Runner Off-line Pages / loongarch64 (push) Has been cancelled
2025-04-19 21:22:13 +08:00
3fd7b7532f 4.1.5 2025-04-19 21:18:26 +08:00
22f4430a27 更新dxvk至2.6.1 2025-04-19 21:17:49 +08:00
40938dc131 更新winetricks版本 2025-04-19 21:16:07 +08:00
a7bf65f407 适配spark-wine10 2025-04-19 21:07:15 +08:00
3272c825c6 更新dxvk至dxvk2.6
Some checks failed
Auto Building Wine Runner / deb (push) Has been cancelled
Auto Building Wine Runner / rpm (push) Has been cancelled
Auto Building Wine Runner / pkg (push) Has been cancelled
Building Wine Runner Off-line Pages / amd64 (push) Has been cancelled
Building Wine Runner Off-line Pages / arm64 (push) Has been cancelled
Building Wine Runner Off-line Pages / loongarch64 (push) Has been cancelled
2025-03-16 08:54:12 +08:00
acfb32d51f 修复run-system-bwrap问题
Some checks failed
Auto Building Wine Runner / deb (push) Has been cancelled
Auto Building Wine Runner / rpm (push) Has been cancelled
Auto Building Wine Runner / pkg (push) Has been cancelled
Building Wine Runner Off-line Pages / amd64 (push) Has been cancelled
Building Wine Runner Off-line Pages / arm64 (push) Has been cancelled
Building Wine Runner Off-line Pages / loongarch64 (push) Has been cancelled
2025-02-06 17:53:28 +08:00
4629bb495b 补充缺失依赖 2025-02-06 17:43:22 +08:00
76347629d1 拷贝wine
Some checks are pending
Auto Building Wine Runner / deb (push) Waiting to run
Auto Building Wine Runner / rpm (push) Waiting to run
Auto Building Wine Runner / pkg (push) Waiting to run
Building Wine Runner Off-line Pages / amd64 (push) Waiting to run
Building Wine Runner Off-line Pages / arm64 (push) Waiting to run
Building Wine Runner Off-line Pages / loongarch64 (push) Waiting to run
2025-02-06 12:48:45 +08:00
197c5706dd 没拷贝lat的文件 2025-02-06 12:42:30 +08:00
4d318701ac 写入dns 2025-02-06 11:38:23 +08:00
34e2062f83 更换注册方式 2025-02-06 10:01:04 +08:00
0a485769ed 调整依赖
Some checks are pending
Auto Building Wine Runner / deb (push) Waiting to run
Auto Building Wine Runner / rpm (push) Waiting to run
Auto Building Wine Runner / pkg (push) Waiting to run
Building Wine Runner Off-line Pages / amd64 (push) Waiting to run
Building Wine Runner Off-line Pages / arm64 (push) Waiting to run
Building Wine Runner Off-line Pages / loongarch64 (push) Waiting to run
2025-02-05 17:54:42 +08:00
ef7737f0d9 调整 2025-02-05 13:10:39 +08:00
1c13377979 调整binfmt注册方式 2025-02-05 13:06:54 +08:00
931fd3114a 调整
Some checks are pending
Auto Building Wine Runner / deb (push) Waiting to run
Auto Building Wine Runner / rpm (push) Waiting to run
Auto Building Wine Runner / pkg (push) Waiting to run
Building Wine Runner Off-line Pages / amd64 (push) Waiting to run
Building Wine Runner Off-line Pages / arm64 (push) Waiting to run
Building Wine Runner Off-line Pages / loongarch64 (push) Waiting to run
2025-02-05 12:51:58 +08:00
2c8e83c2d4 整合action 2025-02-05 12:50:07 +08:00
9f591340b0 使用actions/upload-artifact@v4 2025-02-05 12:43:17 +08:00
878ce96a50 尝试loongarch64架构离线包 2025-02-05 12:39:46 +08:00
6c0549afe6 支持调用deepin-wine-staging
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2025-01-02 22:25:53 +08:00
4d30f1c04d 调整makefile
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-12-21 15:51:34 +08:00
b481f01609 4.1.3 2024-12-21 15:38:55 +08:00
864be06001 !10 feat: 支持spark-wine9的自动屏蔽安装器
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
Merge pull request !10 from shenmo/N/A
2024-12-16 13:58:15 +00:00
189d7a1ba1 feat: 支持spark-wine9的自动屏蔽安装器
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-12-13 11:13:26 +00:00
c2e598c670 4.1.2
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-11-17 15:48:39 +08:00
15c15dc5f8 更新dxvk版本至2.5 2024-11-17 15:45:08 +08:00
676d52c964 修复安全问题 2024-11-17 15:43:17 +08:00
7138c6fbb9 !9 【轻量级 PR】:Fix: Change %u to %F to avoid low wine version can't resolve file:// protocol
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
Merge pull request !9 from shenmo/N/A
2024-11-07 14:23:49 +00:00
979c573768 Fix: Change %u to %F to avoid low wine version can't resolve file:// protocol
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-11-07 05:46:22 +00:00
9ea5e297b6 修复自动构建问题
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-11-06 22:08:25 +08:00
624b4c8b3a !7 fix: Can not pass args that starts with -- && feat: Now add --uri %u as default
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
Merge pull request !7 from shenmo/main
2024-11-05 13:27:29 +00:00
0c4e736b12 fix: GXDE Deb Installer will install xfce-terminal when installing deb 2024-11-04 12:51:01 +08:00
0d0438bddd bump version to 4112
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-11-04 04:44:46 +00:00
3fe1ff8a61 fix: i18n fail on GXDE 2024-11-04 08:26:29 +08:00
1fe4ed75f4 fix: Can not pass args to exe without --uri
Chore: Bump version to 4.1.1.1
2024-11-04 08:19:01 +08:00
ebf9474bc6 feat: Now we pass %u as default config 2024-11-04 07:55:46 +08:00
d7e131c778 fix: Can not pass '--xxx' options to wine progs 2024-11-04 07:51:41 +08:00
9184f42677 补充更新内容
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-11-02 21:47:52 +08:00
674eff5f10 调整版本号 2024-11-02 21:45:34 +08:00
910404b54d 修复虚拟机因无法创建磁盘导致崩溃的问题 2024-11-02 21:45:08 +08:00
ab60ec15b0 !1 fix:i18n failed
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
Merge pull request !1 from shenmo/N/A
2024-10-27 08:33:25 +00:00
535dccb183 fix:i18n failed
Signed-off-by: shenmo <jifengshenmo@outlook.com>
2024-10-20 12:47:31 +00:00
a515570ee3 漏改了地方
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-10-16 22:25:53 +08:00
c73e32fa39 调整版本号 2024-10-16 22:10:07 +08:00
ca88d5f62c run.sh适配GXDE OS(https://gitee.com/gfdgd-xi/deep-wine-runner/issues/IAW3W3) 2024-10-16 21:56:08 +08:00
df561d3d03 修复APPRUN_CMD值错误的问题(https://gitee.com/gfdgd-xi/deep-wine-runner/issues/IAXE1T) 2024-10-16 21:52:07 +08:00
744d2aa262 修复bug(https://gitee.com/gfdgd-xi/deep-wine-runner/issues/IASRHG)
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-09-22 11:09:48 +08:00
7fb1f60aae 修复没有dxvk的问题
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-09-17 12:21:42 +08:00
058f025353 少一个
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-09-15 17:01:30 +08:00
d8360c6e59 漏改了个地方 2024-09-15 16:53:12 +08:00
7fa1edb3f8 更新更新内容 2024-09-15 16:51:54 +08:00
82bd073ff8 使用gxde-terminal替代deepin-terminal-gtk
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-08-30 22:46:03 +08:00
ebed98fd25 修改错别字
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-08-16 11:29:16 +08:00
1ec62bbf86 修复不存在TMPDIR/tmp文件夹时无法打开程序的问题
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-08-11 09:26:24 +08:00
f79bac9d6c 修复打包缺uos-info.sh文件的问题
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-08-05 12:59:13 +08:00
6863e58413 修复打包器若干bug;修改wine封装入deb机制以便可以被uos商店正常签名
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-08-04 22:22:37 +08:00
96319869b6 termux默认也使用标签页页面
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-08-03 18:02:02 +08:00
bc5aca0fd7 优化切换的使用体验 2024-08-03 17:46:56 +08:00
bf18411f7a 支持动态读取添加模组 2024-08-03 17:04:46 +08:00
6ce9d63a19 支持deb内置helper(未测试)
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-08-03 10:05:49 +08:00
4022c3a17b 移除废弃的crossover部分(未测试) 2024-08-03 09:52:08 +08:00
9ae95d6008 初步实现高级打包器脚本文件的抽离(未测试可用性) 2024-08-03 08:42:53 +08:00
81576681e8 Merge branch 'main' of https://gitee.com/gfdgd-xi/deep-wine-runner 2024-08-03 07:28:10 +08:00
aaeb80fde3 开始尝试并入wine helper 2024-08-03 07:27:57 +08:00
df95e7d0b0 单独封装用于实现窗口模块化的组件和调用 2024-08-02 20:59:56 +08:00
c87218232d Repair running problem with not x86 machine and use qemu extra
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-08-02 13:29:20 +08:00
3f1fefa8a5 漏改makefile了
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-08-01 12:42:50 +08:00
88d449d3f4 多标签页初步 2024-08-01 12:41:14 +08:00
d902a6df65 虚拟机配置工具非x86架构不显示virtualbox相关选项
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-07-31 20:57:42 +08:00
082cb21059 小调 2024-07-31 20:50:56 +08:00
b491db6b60 完善虚拟机连接 2024-07-31 20:45:38 +08:00
9b51368f9c 修复打包器设置依赖无法生效的问题 2024-07-31 18:10:18 +08:00
86123c3358 移动下位置
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-07-31 16:28:52 +08:00
29b3196b9a 漏改了一个地方 2024-07-31 16:23:37 +08:00
0f26bdd26b 虚拟机模块支持import 2024-07-31 16:20:56 +08:00
e15ce0ceff 调整makefile 2024-07-31 16:13:23 +08:00
6927b3749b 移除废弃的文件 2024-07-31 16:11:00 +08:00
8c8a471072 添加资源文件 2024-07-31 16:06:18 +08:00
b61da796c5 基础功能初步完成 2024-07-31 15:10:57 +08:00
fc08a3485e 补下图标 2024-07-31 13:33:58 +08:00
ee0c213899 修复离线包的构建问题 2024-07-31 10:43:29 +08:00
d8d09128e6 可以显示UI 2024-07-31 09:41:39 +08:00
673659abd7 信息获取模块的初步重写 2024-07-31 09:34:49 +08:00
56e93dbb72 虚拟机生成模块的初步重写 2024-07-31 08:56:29 +08:00
6ca3cea617 虚拟工具基础模块的重写
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-07-31 08:28:52 +08:00
9fed1005dd 小调makefile
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-07-30 22:38:18 +08:00
24131b0050 初步的虚拟机vnc连接 2024-07-30 16:36:45 +08:00
83fd8fffd4 修复下载量统计脚本因没设置timeout导致dpkg卡住的问题(https://gitee.com/gfdgd-xi/deep-wine-runner/issues/IAGG16)
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-07-30 12:39:02 +08:00
b6f8145fa5 快捷方式工具、wine安装器支持import 2024-07-30 08:26:37 +08:00
1d59f6b4f1 紧急修复arm helper 指定错误bug
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-07-29 18:22:00 +08:00
ab31fc6d65 补一点注释 2024-07-29 17:23:51 +08:00
c88521a3e7 修复debian10判断glibc版本的问题导致推荐wine的问题 2024-07-29 17:15:49 +08:00
385348a7b9 打包器支持import
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-07-29 09:09:15 +08:00
3bcff8dd87 支持将窗口作为组件引入 2024-07-29 08:54:38 +08:00
0623b95fca 尝试termux构建
Some checks failed
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Has been cancelled
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Has been cancelled
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Has been cancelled
2024-07-26 20:59:23 +08:00
fbd14710a5 忘记刷新源 2024-07-26 20:44:03 +08:00
9a212ca212 arch自动构建尝试 2024-07-26 20:42:18 +08:00
ee6b166dd7 更新winetricks版本 2024-07-26 20:36:30 +08:00
fcd4e5e610 修改文本注释
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-07-25 17:13:46 +08:00
dd4785d8e2 加入box64
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-07-25 09:40:29 +08:00
e6df6addd7 调整自动构建 2024-07-25 09:39:20 +08:00
9e1e898da4 移除部分内容以精简体积
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-07-24 23:04:11 +08:00
ff60f69565 debug
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(arm64) / Explore-GitHub-Actions (push) Waiting to run
Building Wine Runner Off-line Pages(amd64) / Explore-GitHub-Actions (push) Waiting to run
2024-07-24 16:39:29 +08:00
c5577568c9 减小包体积 2024-07-24 14:17:32 +08:00
eb6fe87485 参数错误
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
2024-07-24 12:49:37 +08:00
e9f6847e57 调整 2024-07-24 09:04:55 +08:00
47f1b2a843 调整 2024-07-24 08:47:12 +08:00
d95a4cd9f4 调整
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
2024-07-23 22:55:42 +08:00
e5ffd06b26 调整 2024-07-23 22:48:33 +08:00
f327216855 新增arm 2024-07-23 22:42:23 +08:00
d335a72aee 调整 2024-07-23 22:19:52 +08:00
ee8be07185 调整有误
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
2024-07-23 11:30:16 +08:00
4f08e44ca3 有个地方有个小问题 2024-07-23 10:51:30 +08:00
caa08cfa8d 修复AOSC、Termux无法打开Wine安装器的问题 2024-07-23 10:37:09 +08:00
a4ab3b27d1 调整README
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
2024-07-22 11:38:33 +08:00
4caf1a3be5 小调Makefile 2024-07-22 10:46:14 +08:00
20fdb2aa76 4.0.0 2024-07-22 10:28:42 +08:00
4ff16d1cb8 替换一些图标 2024-07-22 09:40:32 +08:00
d7f7dd47cc 新增图标 2024-07-22 09:32:59 +08:00
3e77dcc1a3 移除废弃标签 2024-07-22 08:24:35 +08:00
811fc0b2dc 修复打包器在部分机器上的适配问题 2024-07-22 08:11:21 +08:00
d169d96329 新增输出提示文本(termux)
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
2024-07-21 22:42:41 +08:00
58f9117e45 安装过程中允许设置vnc密码 2024-07-21 22:40:48 +08:00
55aeae22af 新增开启VNC公共访问选项
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
2024-07-21 19:30:03 +08:00
1bdf8de39c 调整更新功能 2024-07-21 18:44:42 +08:00
8f37bfd3b8 优化更新逻辑 2024-07-21 18:12:30 +08:00
7a175c957a 修复/tmp问题 2024-07-21 17:49:45 +08:00
6ac4a191ca 修复无法打开的问题 2024-07-21 13:11:39 +08:00
9296914ed5 修改tmp路径以兼容termux 2024-07-21 12:44:10 +08:00
df5d08cd68 应用运行库新增bwrap识别
Some checks are pending
Auto Building Wine Runner(rpm) / Explore-GitHub-Actions (push) Waiting to run
Auto Building Wine Runner(deb) / Explore-GitHub-Actions (push) Waiting to run
2024-07-21 11:46:54 +08:00
2357c646a1 优化在termux的使用体验 2024-07-21 11:34:44 +08:00
0b0a757765 添加NOVNC 2024-07-21 09:36:40 +08:00
472 changed files with 53308 additions and 14924 deletions

17
.github/workflows/DaoXiangHu-stable vendored Normal file
View File

@@ -0,0 +1,17 @@
mirror_style release
download_style apt
finddebs_style from-indices
variants - buildd fakechroot minbase
keyring /usr/share/keyrings/debian-archive-keyring.gpg
default_mirror https://pkg.loongnix.cn/loongnix/20
# include common settings
if [ -e "$DEBOOTSTRAP_DIR/scripts/debian-common" ]; then
. "$DEBOOTSTRAP_DIR/scripts/debian-common"
elif [ -e /debootstrap/debian-common ]; then
. /debootstrap/debian-common
elif [ -e "$DEBOOTSTRAP_DIR/debian-common" ]; then
. "$DEBOOTSTRAP_DIR/debian-common"
else
error 1 NOCOMMON "File not found: debian-common"
fi

View File

@@ -1,29 +0,0 @@
name: Auto Building Wine Runnerrpm
run-name: ${{ github.actor }} Auto Building Wine Runnerrpm 🚀
on:
push:
workflow_dispatch:
jobs:
Explore-GitHub-Actions:
runs-on: ubuntu-latest
steps:
- name: Building RPM
env:
GUSER: ${{ secrets.GUSER }}
PASSWORD: ${{ secrets.PASSWORD }}
UPLOADURL: ${{ secrets.UPLOADURL }}
run: |
# 配置环境
sudo apt update
sudo apt install git dpkg-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qt5-qmake rpm -y
git clone https://github.com/gfdgd-xi/deep-wine-runner
cd deep-wine-runner
make package-rpm
mv spark-deepin-wine-runner*.rpm /home/runner/spark-deepin-wine-runner.rpm
- name: upload result
uses: actions/upload-artifact@v1
with:
name: spark-deepin-wine-runner.rpm
path: /home/runner/spark-deepin-wine-runner.rpm

View File

@@ -1,17 +1,13 @@
name: Auto Building Wine Runnerdeb
run-name: ${{ github.actor }} Auto Building Wine Runnerdeb 🚀
name: Auto Building Wine Runner
run-name: ${{ github.actor }} Auto Building Wine Runner 🚀
on:
push:
workflow_dispatch:
jobs:
Explore-GitHub-Actions:
deb:
runs-on: ubuntu-latest
steps:
- name: Building DEB
env:
GUSER: ${{ secrets.GUSER }}
PASSWORD: ${{ secrets.PASSWORD }}
UPLOADURL: ${{ secrets.UPLOADURL }}
run: |
# 配置环境
sudo apt update
@@ -22,14 +18,73 @@ jobs:
mv spark-deepin-wine-runner.deb ~
mv spark-deepin-wine-runner-ace.deb ~
- name: upload result
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v4
with:
name: spark-deepin-wine-runner.deb
path: /home/runner/spark-deepin-wine-runner.deb
- name: upload result
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v4
with:
name: spark-deepin-wine-runner-ace.deb
path: /home/runner/spark-deepin-wine-runner-ace.deb
- name: Building DEB (termux)
run: |
cd deep-wine-runner
make package-termux-deb -j4
mv spark-deepin-wine-runner-termux.deb ~
- name: upload result
uses: actions/upload-artifact@v4
with:
name: spark-deepin-wine-runner-termux.deb
path: /home/runner/spark-deepin-wine-runner-termux.deb
rpm:
runs-on: ubuntu-latest
steps:
- name: Building RPM
env:
GUSER: ${{ secrets.GUSER }}
PASSWORD: ${{ secrets.PASSWORD }}
UPLOADURL: ${{ secrets.UPLOADURL }}
run: |
# 配置环境
sudo apt update
sudo apt install git dpkg-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qt5-qmake rpm -y
git clone https://github.com/gfdgd-xi/deep-wine-runner
cd deep-wine-runner
make package-rpm
mv spark-deepin-wine-runner*.rpm /home/runner/spark-deepin-wine-runner.rpm
- name: upload result
uses: actions/upload-artifact@v4
with:
name: spark-deepin-wine-runner.rpm
path: /home/runner/spark-deepin-wine-runner.rpm
pkg:
runs-on: ubuntu-latest
container: archlinux
steps:
- name: Building PKG
env:
GUSER: ${{ secrets.GUSER }}
PASSWORD: ${{ secrets.PASSWORD }}
UPLOADURL: ${{ secrets.UPLOADURL }}
run: |
# 配置环境
pacman -Sy
pacman -S yay git sudo
pacman -S dpkg qt5-base -y
yay install
git clone https://github.com/gfdgd-xi/deep-wine-runner
cd deep-wine-runner
make package-deb -j4
make package-pkg -j4
cd ..
mv spark-deepin-wine-runner*.pkg.tar.zst ../spark-deepin-wine-runner.pkg.tar.zst
- name: upload result
uses: actions/upload-artifact@v4
with:
name: spark-deepin-wine-runner.pkg.tar.zst
path: spark-deepin-wine-runner.pkg.tar.zst

View File

@@ -1,16 +1,13 @@
name: Building Wine Runner Off-line Pages(amd64)
run-name: ${{ github.actor }} Building Wine Runner Off-line Pages(amd64) 🚀
name: Building Wine Runner Off-line Pages
run-name: ${{ github.actor }} Building Wine Runner Off-line Pages 🚀
on:
push:
workflow_dispatch:
jobs:
Explore-GitHub-Actions:
amd64:
runs-on: ubuntu-latest
steps:
- name: Building DEB
env:
GUSER: ${{ secrets.GUSER }}
PASSWORD: ${{ secrets.PASSWORD }}
UPLOADURL: ${{ secrets.UPLOADURL }}
run: |
# 获取所需数据
cpu=$(cat /proc/cpuinfo | grep processor | wc -l)
@@ -30,9 +27,11 @@ jobs:
## 加入 wine 源
sudo chroot debian dpkg --add-architecture i386
sudo chroot debian apt update
sudo chroot debian apt install wget -y
sudo chroot debian apt install sudo gpg wget -y
sudo chroot debian wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
sudo chroot debian wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bookworm/winehq-bookworm.sources
sudo chroot debian bash -c "echo 'deb [trusted=true] https://repo.gxde.top/gxde-os/bixie ./' | sudo tee /etc/apt/sources.list.d/gxde-stable.list"
sudo chroot debian bash -c "echo 'deb [trusted=true] https://repo.gxde.top/gxde-os/tianlu ./' | sudo tee /etc/apt/sources.list.d/gxde-testing.list"
sudo chroot debian apt update
## 获取 Wine 运行器安装包
git clone https://github.com/gfdgd-xi/deep-wine-runner --depth=1
@@ -44,16 +43,29 @@ jobs:
mv deep-wine-runner/spark-deepin-wine-runner.deb debian/tmp/wine-runner.deb
## 安装
sudo chroot debian apt install locales /tmp/wine-runner.deb winehq-devel fcitx xfce4-terminal -y
sudo chroot debian apt install locales qtwayland5 xwayland thunar -y
sudo chroot debian apt install libxenmisc4.17 libxenstore4 libxenforeignmemory1 -y
# 构建软件包
mkdir package/opt -p
mkdir package/runner -p
sudo cp debian/opt/wine-devel package/opt -rv
sudo cp debian/usr/bin package -rv
sudo cp debian/usr/lib package -rv
sudo cp debian/usr/lib32 package -rv
sudo cp debian/usr/share package -rv
sudo cp debian/usr/lib64 package -rv
sudo cp debian/opt/apps/deepin-wine-runner/* package/runner -rv
# 精简运行器体积
sudo rm -rf package/runner/2048
sudo rm -rf package/runner/geek.exe
sudo rm -rf package/runner/BeCyIconGrabber.exe
sudo rm -rf package/runner/Icon
sudo rm -rf package/runner/RegShot.exe
sudo rm -rf package/runner/novnc
sudo rm -rf package/bin/wine*
# 修复 which 命令的问题导致无法正常识别终端的问题
sudo cp package/bin/which.debianutils package/bin/which -rv
# 内置 winehq
sudo cp debian/opt/wine-devel package/runner/wine -rv
cp deep-wine-runner/off-line-shell/run.sh package -rv
cp deep-wine-runner/off-line-shell/run-system-bwrap.sh package -rv
cp deep-wine-runner/off-line-shell/bwrap_amd64 package/bwrap -rv
sudo chmod 777 -Rv package ; true
cd package
@@ -62,17 +74,169 @@ jobs:
tar -cvf ../spark-deepin-wine-runner-off-line.tar *
cd ..
xz -T $cpu spark-deepin-wine-runner-off-line.tar
cp deep-wine-runner/off-line-shell/compression-packager.sh spark-deepin-wine-runner-off-line.sh
cat spark-deepin-wine-runner-off-line.tar.xz >> spark-deepin-wine-runner-off-line.sh
- name: upload result
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v4
with:
name: spark-deepin-wine-runner-off-line.tar.xz
name: spark-deepin-wine-runner-off-line-amd64.tar.xz
path: /home/runner/spark-deepin-wine-runner-off-line.tar.xz
arm64:
runs-on: ubuntu-latest
steps:
- name: Building DEB
run: |
# 获取所需数据
cpu=$(cat /proc/cpuinfo | grep processor | wc -l)
# 配置环境
sudo apt update
sudo apt install python3-requests debootstrap xz-utils qemu-user-static -y
sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools psmisc -y
cd ~
mkdir package
# 部署 chroot 环境
sudo debootstrap --arch=arm64 bookworm debian
wget https://github.com/gfdgd-xi/deep-wine-runner/raw/main/pardus-chroot
sudo cp pardus-chroot /usr/bin
sudo chmod 777 /usr/bin/pardus-chroot
sudo pardus-chroot debian
### 配置容器
## 加入 wine 源
sudo chroot debian apt update
sudo chroot debian apt install sudo gpg wget -y
sudo chroot debian wget https://ryanfortner.github.io/box64-debs/box64.list -O /etc/apt/sources.list.d/box64.list
sudo chroot debian bash -c "wget -qO- https://ryanfortner.github.io/box64-debs/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box64-debs-archive-keyring.gpg"
sudo chroot debian bash -c "echo 'deb [trusted=true] https://repo.gxde.top/gxde-os/bixie ./' | sudo tee /etc/apt/sources.list.d/gxde-stable.list"
sudo chroot debian bash -c "echo 'deb [trusted=true] https://repo.gxde.top/gxde-os/tianlu ./' | sudo tee /etc/apt/sources.list.d/gxde-testing.list"
sudo chroot debian apt update
sudo chroot debian apt install box64 hangover-wine -y
## 获取 Wine 运行器安装包
git clone https://github.com/gfdgd-xi/deep-wine-runner --depth=1
cd deep-wine-runner
make package-deb
cd ..
url=`python3 deep-wine-runner/off-line-shell/GetNewestDebUrl.py`
#wget $url
mv deep-wine-runner/spark-deepin-wine-runner.deb debian/tmp/wine-runner.deb
## 安装
sudo chroot debian apt install locales /tmp/wine-runner.deb fcitx xfce4-terminal qtwayland5 xwayland thunar -y
sudo chroot debian apt install libxenmisc4.17 libxenstore4 libxenforeignmemory1 -y
# 构建软件包
mkdir package/runner -p
sudo cp debian/usr/local/bin package -rv
sudo cp debian/usr/bin package -rv
sudo cp debian/usr/lib package -rv
sudo cp debian/usr/share package -rv
#sudo cp debian/usr/lib64 package -rv
sudo cp debian/opt/apps/deepin-wine-runner/* package/runner -rv
# 精简运行器体积
sudo rm -rf package/runner/2048
sudo rm -rf package/runner/geek.exe
sudo rm -rf package/runner/BeCyIconGrabber.exe
sudo rm -rf package/runner/Icon
sudo rm -rf package/runner/RegShot.exe
sudo rm -rf package/runner/novnc
# 修复 which 命令的问题导致无法正常识别终端的问题
sudo cp package/bin/which.debianutils package/bin/which -rv
cp deep-wine-runner/off-line-shell/run.sh package -rv
cp deep-wine-runner/off-line-shell/run-system-bwrap.sh package -rv
cp deep-wine-runner/off-line-shell/bwrap_arm64 package/bwrap -rv
sudo chmod 777 -Rv package ; true
cd package
# 添加 Wine 运行器离线模式标识
touch runner/off-line.lock
tar -cvf ../spark-deepin-wine-runner-off-line.tar *
cd ..
xz -T $cpu spark-deepin-wine-runner-off-line.tar
- name: upload result
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v4
with:
name: spark-deepin-wine-runner-off-line.sh
path: /home/runner/spark-deepin-wine-runner-off-line.sh
name: spark-deepin-wine-runner-off-line-arm64.tar.xz
path: /home/runner/spark-deepin-wine-runner-off-line.tar.xz
loongarch64:
runs-on: ubuntu-20.04
steps:
- name: Building DEB
run: |
# 获取所需数据
cpu=$(cat /proc/cpuinfo | grep processor | wc -l)
# 配置环境
sudo apt update
sudo apt install python3-requests debootstrap xz-utils qemu-user-static git aria2 squashfs-tools -y
sudo apt install binfmt-support qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools psmisc wget -y
git clone https://github.com/gfdgd-xi/deep-wine-runner --depth=1
sudo cp deep-wine-runner/.github/workflows/DaoXiangHu-stable /usr/share/debootstrap/scripts/
git clone https://gitee.com/loongarch-kvm/qemu-loongarch64-static
cd qemu-loongarch64-static
tar -xvf qemu-loongarch64-static.tar.gz
cd qemu-loongarch64-static
sudo bash qemu-binfmt-conf.sh
sudo cp qemu-loongarch64 /usr/local/bin/
cd ~
mkdir package
# 部署 chroot 环境
#sudo debootstrap --no-check-gpg --arch=loongarch64 DaoXiangHu-stable debian https://pkg.loongnix.cn/loongnix/20
aria2c -x 16 -s 16 https://sourceforge.net/projects/deep-wine-runner-wine-download/files/loongnix/filesystem.squashfs/download
sudo unsquashfs filesystem.squashfs
sudo mv squashfs-root debian
sudo cp /usr/local/bin/qemu-loongarch64 debian/usr/local/bin/qemu-loongarch64 -rv
# 写入 DNS
echo "nameserver 8.8.8.8" | sudo tee debian/etc/resolv.conf
wget https://github.com/gfdgd-xi/deep-wine-runner/raw/main/pardus-chroot
sudo cp pardus-chroot /usr/bin
sudo chmod 777 /usr/bin/pardus-chroot
sudo pardus-chroot debian
### 配置容器
## 加入 wine 源
sudo chroot debian apt update
sudo chroot debian apt install sudo gpg wget -y
sudo chroot debian apt update
sudo chroot debian apt install -y lat i386-runtime-base i386-runtime-extra
sudo chroot debian apt install -y wine
## 获取 Wine 运行器安装包
git clone https://github.com/gfdgd-xi/deep-wine-runner --depth=1
cd deep-wine-runner
make package-deb
cd ..
url=`python3 deep-wine-runner/off-line-shell/GetNewestDebUrl.py`
#wget $url
mv deep-wine-runner/spark-deepin-wine-runner.deb debian/tmp/wine-runner.deb
## 安装
sudo chroot debian apt install locales /tmp/wine-runner.deb fcitx xfce4-terminal qtwayland5 xwayland thunar -y
# 构建软件包
mkdir package/runner -p
sudo cp debian/usr/local/bin package -rv
sudo cp debian/usr/bin package -rv
sudo cp debian/usr/lib package -rv
sudo cp debian/usr/share package -rv
sudo cp debian/usr/gnemul package -rv
#sudo cp debian/usr/lib64 package -rv
sudo cp debian/opt/apps/deepin-wine-runner/* package/runner -rv
sudo cp debian/opt/wine-6.0 package/runner/wine -rv
# 精简运行器体积
sudo rm -rf package/runner/2048
sudo rm -rf package/runner/geek.exe
sudo rm -rf package/runner/BeCyIconGrabber.exe
sudo rm -rf package/runner/Icon
sudo rm -rf package/runner/RegShot.exe
sudo rm -rf package/runner/novnc
# 修复 which 命令的问题导致无法正常识别终端的问题
cp deep-wine-runner/off-line-shell/run.sh package -rv
cp deep-wine-runner/off-line-shell/run-system-bwrap.sh package -rv
cp deep-wine-runner/off-line-shell/bwrap_loongarch64 package/bwrap -rv
sudo chmod 777 -Rv package ; true
cd package
# 添加 Wine 运行器离线模式标识
touch runner/off-line.lock
tar -cvf ../spark-deepin-wine-runner-off-line.tar *
cd ..
xz -T $cpu spark-deepin-wine-runner-off-line.tar
- name: upload result
uses: actions/upload-artifact@v4
with:
name: spark-deepin-wine-runner-off-line-loongarch64.tar.xz
path: /home/runner/spark-deepin-wine-runner-off-line.tar.xz

1
.gitignore vendored
View File

@@ -5,4 +5,5 @@ VM-source/Makefile
*.rpm
*.pro.user
.vscode
package-script.zip
build-*-Debug

View File

@@ -12,6 +12,7 @@
#################
import os
import sys
import globalenv
import traceback
import updatekiller
import PyQt5.QtGui as QtGui
@@ -101,7 +102,10 @@ homePath = os.getenv("HOME")
iconPath = "{}/deepin-wine-runner.svg".format(programPath)
#GetDesktopList(f"{homePath}/.local/share/applications")
#print(desktopList)
app = QtWidgets.QApplication(sys.argv)
if (__name__ == "__main__"):
app = QtWidgets.QApplication(sys.argv)
else:
app = globalenv.get_value("app")
window = QtWidgets.QMainWindow()
widget = QtWidgets.QWidget()
layout = QtWidgets.QGridLayout()
@@ -118,6 +122,7 @@ window.setCentralWidget(widget)
window.setWindowTitle("图标管理")
window.resize(int(window.frameGeometry().width() * 1.5), int(window.frameGeometry().height() * 1.2))
window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg"))
window.show()
GetDesktopThread()
app.exec_()
if (__name__ == "__main__"):
window.show()
app.exec_()

0
ConfigLanguareRunner-help.json Normal file → Executable file
View File

16
DefaultSetting.py Normal file → Executable file
View File

@@ -15,6 +15,10 @@ import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore
import PyQt5.QtWidgets as QtWidgets
TMPDIR = os.getenv("TMPDIR")
if (TMPDIR == None):
TMPDIR = ""
# 获取用户主目录
def get_home():
return os.path.expanduser('~')
@@ -208,9 +212,9 @@ class SaveLogReport():
traceback.print_exc()
os.system(f"'{programPath}/wrestool' '{binPath}' -x -t 14 > '/tmp/wine-runner-log-icon.png'")
# 如果提取成功
if os.path.exists("/tmp/wine-runner-log-icon.png"):
if os.path.exists(TMPDIR + "/tmp/wine-runner-log-icon.png"):
# 转换成 base64 编码
self.binIcon = "data:image/jpg;base64," + FileToBase64("/tmp/wine-runner-log-icon.png")
self.binIcon = "data:image/jpg;base64," + FileToBase64(TMPDIR + "/tmp/wine-runner-log-icon.png")
self.binIconPath = "/tmp/wine-runner-log-icon.png"
else:
self.binIcon = "Not Found"
@@ -317,9 +321,9 @@ class SaveLogReport():
messagebox.exec_()
def To7z(self, savePath):
os.system("rm -rfv /tmp/wine-runner-log")
os.system("mkdir -v /tmp/wine-runner-log")
self.ToHtml("/tmp/wine-runner-log/index.html", toZip=True)
os.system("rm -rfv $TMPDIR/tmp/wine-runner-log")
os.system("mkdir -v $TMPDIR/tmp/wine-runner-log")
self.ToHtml(TMPDIR + "/tmp/wine-runner-log/index.html", toZip=True)
if os.path.exists(self.binIconPath):
shutil.copy(self.binIconPath, f"/tmp/wine-runner-log/{os.path.basename(self.binIconPath)}")
lists = ["wine-runner-log-icon.png", "index.html"]
@@ -332,7 +336,7 @@ class SaveLogReport():
else:
lists.append(name)
shutil.copy(i, f"/tmp/wine-runner-log/{name}")
os.system(f"7z a '{savePath}' /tmp/wine-runner-log")
os.system(f"7z a '{savePath}' $TMPDIR/tmp/wine-runner-log")
def ToHtml(self, savePath, toZip=False):

View File

@@ -4,7 +4,7 @@ X-Categories=System;Wine;
Exec=/usr/bin/deepin-wine-runner %F
Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg
Name=Wine Runner
Name[zh]=Wine 运行器
Name[zh_CN]=Wine 运行器
Terminal=false
StartupNotify=true
Keywords=exe;scr;

0
DisabledOpengl.reg Normal file → Executable file
View File

6
Download.py Normal file → Executable file
View File

@@ -8,4 +8,8 @@ import requests
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
with open(f"{programPath}/information.json") as file:
version = json.loads(file.read())["Version"]
print(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9JbnN0YWxsLnBocD9WZXJzaW9uPQ==").decode("utf-8") + version).text)
print(requests.get(base64.b64decode("aHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZGVlcC13aW5lLXJ1bm5lci13aW5lLWRvd25sb2FkL2ZpbGVzL2Rvd25sb2FkLXRpbWUv").decode("utf-8")
+ version
+ base64.b64decode("L2Rvd25sb2Fk").decode("utf-8"),
timeout=5 # timeout 设置为 5S
).text)

0
EnabledOpengl.reg Normal file → Executable file
View File

BIN
Icon/Function/360.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
Icon/Function/bilibili.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

37
Icon/Function/deb.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>dialog-error</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="dialog-error">
<image id="Bitmap" x="1" y="2" width="62" height="62" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAABGdBTUEAA1teXP8meAAABQhJREFUaAXlmol2ozAMANu973v//yv3ProammEVAwWT5hVcvacaHFvWSLKhaS8vziuXhfnyvvj44qroKO+Lj9ffzjlSaznb47pU7DnGVrjccp2VeYhjru9O+OniJ5jopmqHVn0Q1ygixN+4RhEhnOt45zPG8c53ji1jVomLrpock5yvszj/8GDsT7S/Q9c6ic1HodkegTAIcbnadu84RmqkBMY5FMd+Hdpobk0I6ONQWgKKnhQAAcLOYnGOpWlGfoYFy3ixscqBrPnkMAd4twJdVZWl0wdbsw3QKPMsQzKMVi0c49cIa7h9qACTUG2rBjxDsyhOfD+01QufOMEAEHwUqQr8EnCBzTTQlBmlfdeCH+5/wIWfrYQacCILNMCU9lbEg869L/yN/s2Bm21LitJmoa0Jhxx+LYa/CVxoxmCQTG8ROtzqxFLHV68PHw2bKfAMTXlzkm6pvIck1z1kHt89fCfLfgyciQifaeBH17OPH1QlvqNmXqaegBNxTOhnIi37em+Cz5lh4D9wWXKJs1fI9LnfxvL6t3lNtp8e/B+U/FjGgecUZzB7e6/iGx4sN5Z6zjaD91jiZZJggIXKlq8bU2acDxnEAbHlR1fn/IIfcgjeTxHcaDCglWwLOZp1wRkEvPd7PdCEza0ssMHYiaDc0Em29/Cigr81AhNsA3CzTalv4beuGqglY2GCrc+6F4LzCLM0lhjcyxiZel5LXXAH7AWoxk9OeMH7w+w+gJPUSfAWnt1TVTDIONlGiMZ9AIf1Mu9xAjB4mWdUIwIbjF2iBYeNjpYPN9g6aGAF7zvobFwGGYfXQLTIfsTmjXu75czL1rEKTobp4LWuVYHNBPelTQfKl4util+cdvBk3Chw6rWecZ9aV5Y68HTyq1urAhuMfcYBFZxAGAz6WxG5JsF5ZX3eCm3igAm2I3Cybcb58FloawJTBh/scT7kgGvpkJMngx/tZ7LOl/Do69BWBBa5YOwkH2SWO1/MURotnPAwwAJTv7/jerSkebWjPJjwLXTP8j6cB5i/AfonpS7rOeMA0sle4FtJ3nT8D4O43J3gOwz+Q0Nf5pBMHWJknaDwGPgaukf5EE6TZcCPsg1MmXH6iIwTCMA7Oncm+IzvGfoIYSrjDmLyi1CCsZe/sLwMX1+F8jezXOazpQ7s0aCDIY3E7WaFfwTgQAPaA43DbSBTGQdeIQjc8zzklB81FP13LTy6PocCDDjbVV/LRE4ebjGnEyaonAdvQreYeTINNL4Bzbbk6aTvcXksUxnPo4wWLZl/G0okWWQLwn7+GGqmZ6Fxegk444ycpUPZM5fo3qWwn6lCtqCZHjy6xhxcAu5+z/AEgGc8J6gRHrN/rj5Lm5cU3jOEtrxn110Cno2U8Myn9Hm9pfStiLg8i/Am9imUNcksmfb0FhofZ6UWHIMlPLCcqLw00BKARYvHuKWCXcqatzHWI8Moa3l661d0zYtlPD/y/wjncMqjOIVSdvn9+EvcU4ZkYo2QFF6e2E7YZUsBKqzAVllVsIUIe1XiPFoUJ1ECQDmq9OEgzuo49wRDhwmecw0cLbYYxzzVuWVZV0GHvc5p2rVSBiBD5GBwbYUYLOdaorQEAwUsQ3rNZ46Py/VbysUxcopoJ0MJWraOyesJI3jZ+jktYnt9t+KnDq+YOjol2xMwt0xyjK0QueU6q4s5xvvVrYuvNjAzsbRf3pfTS7Dyvhy/+v4fra1pWYxQ1MYAAAAASUVORK5CYII="></image>
<ellipse id="Oval" fill="#C51818" cx="32" cy="32" rx="28" ry="28"></ellipse>
<path d="M40.7494771,20.5594658 C41.4928588,19.8160841 42.6929596,19.8109252 43.4415538,20.5595194 C44.1849651,21.3029306 44.1873135,22.50589 43.4416074,23.2515961 L23.2505229,43.4426806 C22.5071412,44.1860623 21.3070404,44.1912212 20.5584462,43.442627 C19.8150349,42.6992158 19.8126865,41.4962564 20.5583926,40.7505503 L40.7494771,20.5594658 Z" id="Rectangle" fill="#FFFFFF"></path>
<path d="M43.4405842,40.7476216 C44.1838994,41.4909368 44.1890579,42.6909303 43.4405307,43.4394576 C42.6971859,44.1828023 41.4943341,44.1851506 40.7486947,43.4395111 L20.5594158,23.2502322 C19.8161006,22.506917 19.8109421,21.3069235 20.5594693,20.5583962 C21.3028141,19.8150515 22.5056659,19.8127032 23.2513053,20.5583427 L43.4405842,40.7476216 Z" id="Rectangle" fill="#FFFFFF"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>dialog-ok</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="dialog-ok">
<image id="Bitmap" x="1" y="2" width="62" height="62" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAABGdBTUEAA1teXP8meAAABQhJREFUaAXlmol2ozAMANu973v//yv3ProammEVAwWT5hVcvacaHFvWSLKhaS8vziuXhfnyvvj44qroKO+Lj9ffzjlSaznb47pU7DnGVrjccp2VeYhjru9O+OniJ5jopmqHVn0Q1ygixN+4RhEhnOt45zPG8c53ji1jVomLrpock5yvszj/8GDsT7S/Q9c6ic1HodkegTAIcbnadu84RmqkBMY5FMd+Hdpobk0I6ONQWgKKnhQAAcLOYnGOpWlGfoYFy3ixscqBrPnkMAd4twJdVZWl0wdbsw3QKPMsQzKMVi0c49cIa7h9qACTUG2rBjxDsyhOfD+01QufOMEAEHwUqQr8EnCBzTTQlBmlfdeCH+5/wIWfrYQacCILNMCU9lbEg869L/yN/s2Bm21LitJmoa0Jhxx+LYa/CVxoxmCQTG8ROtzqxFLHV68PHw2bKfAMTXlzkm6pvIck1z1kHt89fCfLfgyciQifaeBH17OPH1QlvqNmXqaegBNxTOhnIi37em+Cz5lh4D9wWXKJs1fI9LnfxvL6t3lNtp8e/B+U/FjGgecUZzB7e6/iGx4sN5Z6zjaD91jiZZJggIXKlq8bU2acDxnEAbHlR1fn/IIfcgjeTxHcaDCglWwLOZp1wRkEvPd7PdCEza0ssMHYiaDc0Em29/Cigr81AhNsA3CzTalv4beuGqglY2GCrc+6F4LzCLM0lhjcyxiZel5LXXAH7AWoxk9OeMH7w+w+gJPUSfAWnt1TVTDIONlGiMZ9AIf1Mu9xAjB4mWdUIwIbjF2iBYeNjpYPN9g6aGAF7zvobFwGGYfXQLTIfsTmjXu75czL1rEKTobp4LWuVYHNBPelTQfKl4util+cdvBk3Chw6rWecZ9aV5Y68HTyq1urAhuMfcYBFZxAGAz6WxG5JsF5ZX3eCm3igAm2I3Cybcb58FloawJTBh/scT7kgGvpkJMngx/tZ7LOl/Do69BWBBa5YOwkH2SWO1/MURotnPAwwAJTv7/jerSkebWjPJjwLXTP8j6cB5i/AfonpS7rOeMA0sle4FtJ3nT8D4O43J3gOwz+Q0Nf5pBMHWJknaDwGPgaukf5EE6TZcCPsg1MmXH6iIwTCMA7Oncm+IzvGfoIYSrjDmLyi1CCsZe/sLwMX1+F8jezXOazpQ7s0aCDIY3E7WaFfwTgQAPaA43DbSBTGQdeIQjc8zzklB81FP13LTy6PocCDDjbVV/LRE4ebjGnEyaonAdvQreYeTINNL4Bzbbk6aTvcXksUxnPo4wWLZl/G0okWWQLwn7+GGqmZ6Fxegk444ycpUPZM5fo3qWwn6lCtqCZHjy6xhxcAu5+z/AEgGc8J6gRHrN/rj5Lm5cU3jOEtrxn110Cno2U8Myn9Hm9pfStiLg8i/Am9imUNcksmfb0FhofZ6UWHIMlPLCcqLw00BKARYvHuKWCXcqatzHWI8Moa3l661d0zYtlPD/y/wjncMqjOIVSdvn9+EvcU4ZkYo2QFF6e2E7YZUsBKqzAVllVsIUIe1XiPFoUJ1ECQDmq9OEgzuo49wRDhwmecw0cLbYYxzzVuWVZV0GHvc5p2rVSBiBD5GBwbYUYLOdaorQEAwUsQ3rNZ46Py/VbysUxcopoJ0MJWraOyesJI3jZ+jktYnt9t+KnDq+YOjol2xMwt0xyjK0QueU6q4s5xvvVrYuvNjAzsbRf3pfTS7Dyvhy/+v4fra1pWYxQ1MYAAAAASUVORK5CYII="></image>
<ellipse id="Oval" fill="#7ED321" cx="32" cy="32" rx="28" ry="28"></ellipse>
<polyline id="Path-4" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" points="18 32 27.5104121 42.0104121 46 23"></polyline>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>dialog-question</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="dialog-question">
<image id="Bitmap" x="1" y="2" width="62" height="62" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAABGdBTUEAA1teXP8meAAABQhJREFUaAXlmol2ozAMANu973v//yv3ProammEVAwWT5hVcvacaHFvWSLKhaS8vziuXhfnyvvj44qroKO+Lj9ffzjlSaznb47pU7DnGVrjccp2VeYhjru9O+OniJ5jopmqHVn0Q1ygixN+4RhEhnOt45zPG8c53ji1jVomLrpock5yvszj/8GDsT7S/Q9c6ic1HodkegTAIcbnadu84RmqkBMY5FMd+Hdpobk0I6ONQWgKKnhQAAcLOYnGOpWlGfoYFy3ixscqBrPnkMAd4twJdVZWl0wdbsw3QKPMsQzKMVi0c49cIa7h9qACTUG2rBjxDsyhOfD+01QufOMEAEHwUqQr8EnCBzTTQlBmlfdeCH+5/wIWfrYQacCILNMCU9lbEg869L/yN/s2Bm21LitJmoa0Jhxx+LYa/CVxoxmCQTG8ROtzqxFLHV68PHw2bKfAMTXlzkm6pvIck1z1kHt89fCfLfgyciQifaeBH17OPH1QlvqNmXqaegBNxTOhnIi37em+Cz5lh4D9wWXKJs1fI9LnfxvL6t3lNtp8e/B+U/FjGgecUZzB7e6/iGx4sN5Z6zjaD91jiZZJggIXKlq8bU2acDxnEAbHlR1fn/IIfcgjeTxHcaDCglWwLOZp1wRkEvPd7PdCEza0ssMHYiaDc0Em29/Cigr81AhNsA3CzTalv4beuGqglY2GCrc+6F4LzCLM0lhjcyxiZel5LXXAH7AWoxk9OeMH7w+w+gJPUSfAWnt1TVTDIONlGiMZ9AIf1Mu9xAjB4mWdUIwIbjF2iBYeNjpYPN9g6aGAF7zvobFwGGYfXQLTIfsTmjXu75czL1rEKTobp4LWuVYHNBPelTQfKl4util+cdvBk3Chw6rWecZ9aV5Y68HTyq1urAhuMfcYBFZxAGAz6WxG5JsF5ZX3eCm3igAm2I3Cybcb58FloawJTBh/scT7kgGvpkJMngx/tZ7LOl/Do69BWBBa5YOwkH2SWO1/MURotnPAwwAJTv7/jerSkebWjPJjwLXTP8j6cB5i/AfonpS7rOeMA0sle4FtJ3nT8D4O43J3gOwz+Q0Nf5pBMHWJknaDwGPgaukf5EE6TZcCPsg1MmXH6iIwTCMA7Oncm+IzvGfoIYSrjDmLyi1CCsZe/sLwMX1+F8jezXOazpQ7s0aCDIY3E7WaFfwTgQAPaA43DbSBTGQdeIQjc8zzklB81FP13LTy6PocCDDjbVV/LRE4ebjGnEyaonAdvQreYeTINNL4Bzbbk6aTvcXksUxnPo4wWLZl/G0okWWQLwn7+GGqmZ6Fxegk444ycpUPZM5fo3qWwn6lCtqCZHjy6xhxcAu5+z/AEgGc8J6gRHrN/rj5Lm5cU3jOEtrxn110Cno2U8Myn9Hm9pfStiLg8i/Am9imUNcksmfb0FhofZ6UWHIMlPLCcqLw00BKARYvHuKWCXcqatzHWI8Moa3l661d0zYtlPD/y/wjncMqjOIVSdvn9+EvcU4ZkYo2QFF6e2E7YZUsBKqzAVllVsIUIe1XiPFoUJ1ECQDmq9OEgzuo49wRDhwmecw0cLbYYxzzVuWVZV0GHvc5p2rVSBiBD5GBwbYUYLOdaorQEAwUsQ3rNZ46Py/VbysUxcopoJ0MJWraOyesJI3jZ+jktYnt9t+KnDq+YOjol2xMwt0xyjK0QueU6q4s5xvvVrYuvNjAzsbRf3pfTS7Dyvhy/+v4fra1pWYxQ1MYAAAAASUVORK5CYII="></image>
<ellipse id="Oval" fill="#11B5FF" cx="32" cy="32" rx="28" ry="28"></ellipse>
<path d="M32,40 C30.3153053,40 29,41.3153053 29,43 C29,44.6605881 30.3264079,46 32,46 C33.6735921,46 35,44.6605881 35,43 C35,41.3153053 33.6846947,40 32,40 Z" id="Path" fill="#FFFFFF"></path>
<path d="M32.468,16.96 C27.4238833,16.96 23.58,20.0244775 23.58,24.1702907 C23.58,26.1861804 25.003148,27.77337 27.032,27.77337 C28.9057249,27.77337 30.124,26.4889526 30.124,24.7281068 C30.124,23.0803988 29.3642533,22.3265653 27.8296148,21.9566688 C27.4706135,21.8638914 27.316,21.7167857 27.316,21.4183975 C27.316,20.1849102 29.1314221,18.7367478 31.64,18.7367478 C34.4418576,18.7367478 36.072,20.4206734 36.072,23.4265357 C36.072,25.5483621 35.3753311,26.8992916 33.4522353,29.2779172 C33.2518819,29.5253283 30,32.5 30,35 C30,35.916658 30,37 31,37.5 C32,38 32.1923697,36.5680604 32.6329793,35.0204247 C33.0706287,34.087734 34.2408493,32.7804809 37.3328167,31.0068188 C40.882884,28.675952 41.968,26.858853 41.968,23.9843519 C41.968,19.7046154 38.1785728,16.96 32.468,16.96 Z" id="Path" fill="#FFFFFF"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
<title>dialog-warning</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="dialog-warning">
<image id="Bitmap" x="1" y="2" width="62" height="62" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAYAAABzwahEAAAABGdBTUEAA1teXP8meAAABQhJREFUaAXlmol2ozAMANu973v//yv3ProammEVAwWT5hVcvacaHFvWSLKhaS8vziuXhfnyvvj44qroKO+Lj9ffzjlSaznb47pU7DnGVrjccp2VeYhjru9O+OniJ5jopmqHVn0Q1ygixN+4RhEhnOt45zPG8c53ji1jVomLrpock5yvszj/8GDsT7S/Q9c6ic1HodkegTAIcbnadu84RmqkBMY5FMd+Hdpobk0I6ONQWgKKnhQAAcLOYnGOpWlGfoYFy3ixscqBrPnkMAd4twJdVZWl0wdbsw3QKPMsQzKMVi0c49cIa7h9qACTUG2rBjxDsyhOfD+01QufOMEAEHwUqQr8EnCBzTTQlBmlfdeCH+5/wIWfrYQacCILNMCU9lbEg869L/yN/s2Bm21LitJmoa0Jhxx+LYa/CVxoxmCQTG8ROtzqxFLHV68PHw2bKfAMTXlzkm6pvIck1z1kHt89fCfLfgyciQifaeBH17OPH1QlvqNmXqaegBNxTOhnIi37em+Cz5lh4D9wWXKJs1fI9LnfxvL6t3lNtp8e/B+U/FjGgecUZzB7e6/iGx4sN5Z6zjaD91jiZZJggIXKlq8bU2acDxnEAbHlR1fn/IIfcgjeTxHcaDCglWwLOZp1wRkEvPd7PdCEza0ssMHYiaDc0Em29/Cigr81AhNsA3CzTalv4beuGqglY2GCrc+6F4LzCLM0lhjcyxiZel5LXXAH7AWoxk9OeMH7w+w+gJPUSfAWnt1TVTDIONlGiMZ9AIf1Mu9xAjB4mWdUIwIbjF2iBYeNjpYPN9g6aGAF7zvobFwGGYfXQLTIfsTmjXu75czL1rEKTobp4LWuVYHNBPelTQfKl4util+cdvBk3Chw6rWecZ9aV5Y68HTyq1urAhuMfcYBFZxAGAz6WxG5JsF5ZX3eCm3igAm2I3Cybcb58FloawJTBh/scT7kgGvpkJMngx/tZ7LOl/Do69BWBBa5YOwkH2SWO1/MURotnPAwwAJTv7/jerSkebWjPJjwLXTP8j6cB5i/AfonpS7rOeMA0sle4FtJ3nT8D4O43J3gOwz+Q0Nf5pBMHWJknaDwGPgaukf5EE6TZcCPsg1MmXH6iIwTCMA7Oncm+IzvGfoIYSrjDmLyi1CCsZe/sLwMX1+F8jezXOazpQ7s0aCDIY3E7WaFfwTgQAPaA43DbSBTGQdeIQjc8zzklB81FP13LTy6PocCDDjbVV/LRE4ebjGnEyaonAdvQreYeTINNL4Bzbbk6aTvcXksUxnPo4wWLZl/G0okWWQLwn7+GGqmZ6Fxegk444ycpUPZM5fo3qWwn6lCtqCZHjy6xhxcAu5+z/AEgGc8J6gRHrN/rj5Lm5cU3jOEtrxn110Cno2U8Myn9Hm9pfStiLg8i/Am9imUNcksmfb0FhofZ6UWHIMlPLCcqLw00BKARYvHuKWCXcqatzHWI8Moa3l661d0zYtlPD/y/wjncMqjOIVSdvn9+EvcU4ZkYo2QFF6e2E7YZUsBKqzAVllVsIUIe1XiPFoUJ1ECQDmq9OEgzuo49wRDhwmecw0cLbYYxzzVuWVZV0GHvc5p2rVSBiBD5GBwbYUYLOdaorQEAwUsQ3rNZ46Py/VbysUxcopoJ0MJWraOyesJI3jZ+jktYnt9t+KnDq+YOjol2xMwt0xyjK0QueU6q4s5xvvVrYuvNjAzsbRf3pfTS7Dyvhy/+v4fra1pWYxQ1MYAAAAASUVORK5CYII="></image>
<ellipse id="Oval" fill="#F39800" cx="32" cy="32" rx="28" ry="28"></ellipse>
<path d="M32.041368,39 L32.041368,39 C30.7366037,39 29.6679395,38.0426848 29.6260007,36.8352603 L29.0015777,18.8661959 C28.9472125,17.2994188 30.3047888,16 31.9994292,16 L31.9994292,16 C33.6894097,16 35.0454327,17.2907943 34.998834,18.8532592 L34.4567354,36.823761 C34.4210097,38.0369352 33.3507923,39 32.041368,39 L32.041368,39 Z" id="Shape" fill="#FFFFFF"></path>
<ellipse id="Oval" fill="#FFFFFF" cx="32" cy="46" rx="3" ry="3"></ellipse>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 33 KiB

BIN
Icon/Function/gitee.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
Icon/Function/gitlab.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,227 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="&#x56FE;&#x5C42;_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<g style="display:none;opacity:0.5;">
<rect x="-0.018" y="-0.005" style="display:inline;" width="48" height="48"/>
</g>
<g>
<image style="overflow:visible;opacity:0.3;" width="201" height="201" xlink:href="data:image/png;base64,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
QmCC" transform="matrix(0.24 0 0 0.24 -0.0125 0.9876)">
</image>
<g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="24.0024" y1="9.1404" x2="24.0024" y2="38.851">
<stop offset="0" style="stop-color:#FF78A7"/>
<stop offset="1" style="stop-color:#FF6166"/>
</linearGradient>
<path style="fill:url(#SVGID_1_);" d="M24.003,9.14c-8.192,0-14.856,6.665-14.856,14.855s6.664,14.855,14.856,14.855
c8.191,0,14.855-6.665,14.855-14.855S32.193,9.14,24.003,9.14z M24.003,32.238c-4.545,0-8.243-3.698-8.243-8.243
c0-4.545,3.698-8.242,8.243-8.242c4.545,0,8.243,3.698,8.243,8.242C32.245,28.54,28.547,32.238,24.003,32.238z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="24" y1="2.9959" x2="24" y2="44.994">
<stop offset="0" style="stop-color:#EEFFFF"/>
<stop offset="1" style="stop-color:#C0D7F8"/>
</linearGradient>
<path style="fill:url(#SVGID_2_);" d="M44.986,18.905c-0.533-2.199-1.404-4.266-2.554-6.145c-0.133-0.217-0.406-0.287-0.641-0.19
c-1.773,0.725-3.876,0.386-5.316-1.053c-1.439-1.439-1.778-3.541-1.054-5.314c0.096-0.235,0.026-0.508-0.19-0.641
c-1.88-1.15-3.948-2.02-6.147-2.552c-0.248-0.06-0.492,0.084-0.59,0.319c-0.739,1.77-2.468,3.021-4.507,3.021
c-2.035,0-3.762-1.247-4.503-3.014c-0.099-0.235-0.343-0.379-0.591-0.319c-2.2,0.537-4.269,1.41-6.148,2.563
c-0.215,0.132-0.283,0.401-0.188,0.634c0.724,1.772,0.384,3.874-1.055,5.313c-1.436,1.437-3.534,1.778-5.305,1.059
c-0.233-0.095-0.502-0.026-0.634,0.189c-1.149,1.881-2.019,3.95-2.55,6.149c-0.06,0.247,0.084,0.491,0.318,0.59
c1.762,0.742,3.005,2.467,3.005,4.501c0,2.03-1.24,3.753-2.997,4.498c-0.234,0.099-0.377,0.343-0.317,0.59
c0.535,2.2,1.409,4.268,2.562,6.147c0.131,0.214,0.4,0.283,0.633,0.189c1.769-0.716,3.863-0.373,5.298,1.061
c1.433,1.432,1.776,3.524,1.062,5.293c-0.094,0.233-0.025,0.501,0.189,0.632c1.881,1.152,3.95,2.023,6.15,2.556
c0.247,0.06,0.491-0.083,0.59-0.317c0.744-1.758,2.468-2.998,4.497-2.998c2.03,0,3.753,1.24,4.497,2.998
c0.099,0.234,0.343,0.377,0.59,0.317c2.2-0.533,4.268-1.404,6.149-2.555c0.215-0.131,0.283-0.4,0.189-0.633
c-0.719-1.77-0.378-3.868,1.058-5.304c1.437-1.436,3.536-1.776,5.306-1.056c0.233,0.095,0.502,0.026,0.633-0.188
c1.153-1.88,2.026-3.949,2.56-6.149c0.06-0.248-0.084-0.492-0.319-0.59C42.9,27.762,41.653,26.035,41.653,24
c0-2.037,1.248-3.764,3.015-4.504C44.902,19.397,45.046,19.153,44.986,18.905z M24.003,37.495c-7.444,0-13.5-6.056-13.5-13.5
c0-7.443,6.056-13.5,13.5-13.5c7.443,0,13.5,6.056,13.5,13.5C37.502,31.439,31.446,37.495,24.003,37.495z"/>
<path style="fill:#DCEDFF;" d="M24.003,13.954c-5.537,0-10.041,4.506-10.041,10.042c0,5.536,4.504,10.042,10.041,10.042
c5.537,0,10.042-4.506,10.042-10.042C34.044,18.459,29.539,13.954,24.003,13.954z M27.343,20.25
c1.031,0.92,1.68,2.259,1.68,3.746c0,2.769-2.253,5.021-5.021,5.021c-2.769,0-5.021-2.253-5.021-5.021
c0-2.769,2.252-5.021,5.021-5.021C25.284,18.974,26.455,19.457,27.343,20.25"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

129
Icon/Function/qtcreator.svg Normal file
View File

@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="&#x56FE;&#x5C42;_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
<g>
<image overflow="visible" opacity="0.3" width="200" height="192" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMwAAADECAYAAADTcc6fAAAACXBIWXMAAC4jAAAuIwF4pT92AAAA
GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAE5BJREFUeNrsnYdy40gSRAuGRpTb
vf//xtvZ0YxGogHuGNEVTBarG6CFy4zoIORmRBJPWdlWhKKo1sr4+1I3Uk1g+vk7EZrhwFITmMf8
DtkZX6f6BUvd4prAXPH/etfZGfBQ/YKmdh7rsUBTdgRK6jGLfExw+g1LDa2KfH7wblN2CApCkIfr
3IEki4BDaPoHisKCTT83itKs7BAUhCTVMgcmAtMPYGzbQdtDsg3XMhZwyo5A2bcCHrHlzrXnPoSm
P7BUAQwFZBOu8/C4dcq0bIjQlHeGxYJiQSgjrYDHIuI4BKYfwCAse1DWpul7tIXvHyQs9wAmi4CS
Gwhm4XoW2hw+njvwFBGnITTdAVM5sHyH9hVaDnBUANnkgbGukhtXKR1AsC3MxzNoheM0BKYf7rKD
EkxB+QzvW+7AhTkmG2KWKW8MiwdKYUBYBkAWcL2E6zlANYuUZswy3feMVZBP9qXXn9Dm4b0SgGoL
+SabssOkyi+92ecGkH1bhccnaAjS/ExgCE032QVLsb2z/ILSuQL30abvXzXUF6C8MSxYfmG5pVCs
oD2HRwQGoZkRmN6XY1soxZbhvVJYFKQ5vIe5qQom00vmjacUJqMswE0UEG0vcL1ygJlHMowX+glL
98BoblFY1gGiRQSYwb5f5Q1gQWdRV1EAEJB9e4VHDxgsx0oAJm9wF0Lz+PyCYV9h2QVYPqFSKM0f
PO99q8cKjNcbhs6ygNLrGeDYtze4RmC0JGMpNhyHqQCOEmD5Njk0Bstgy7JrHEZv4tJklRU4yVto
73D9CiXZCmDxgr6dJiN0l94AszWZ5dv80bN/8LyezVFnmFhPGJZhz+Ag79D+AmC0PFuZ3DKT48HK
1Og+18h0X5IVJuDPnfdwFLnlEmC8HjEcmUdneQuAYEOHsbkl1X2cS3wpANUdODqhspLTuYCpMjqb
AjB2YNK6iwfL39AUmFdwlicTClP2TWD66TTSEpBsTO/ZuQ5jYVmYUgyB+U94fIdS7Nlklhn0sI3+
xR6RdPBxcuuVypag2JB/jrtoKYZlGPaEsct4mO4i0m517KSAEaccw16xlRy6jt8g4P8Fgf8NnAVh
4WDksDXJ96q8wF3mxl1eDCzYO/YKId8OZOHiMIJCjcZhsGTSUkynvDwbd3l3MgvCMhNO06dGCExT
N7IF5lX8gcknBxZvEh5FDaa3o427FADMwpRjOP0FJ1Vib1hJWKixAhObtj8zYX+VgGVJWKipOYw3
UKlT9p/keLr+cwQW2xtGWKhRAoMOUzj5xQPGmxtGZ6FGDYx1AS+/LOV4Cr+3pqVppipFjc5hYrOS
cS0+LjH25oblBIWaUkkWcxjbmtZBsBSjRguMt1MlArOIwOKtsCMo1GiByRocBneBsS21wo7QUKMP
/bGtk2YGmtj+YQz51KQyjIg/ym+3eW2zJJXQUJPIMLEcY9to129TVJuSzGYYC01sZ/2mRWAUNXqH
ySS+yUHRwlkIDTWJDBM7tiK1O0hq3zCKGhUwWYuyLJf0Vjp0FGpSDpM1lGbeYa2xnV4oanKhPwZO
03HgFDW5DGOzCEGhKGleouyFeIJCEZgLwJFE/qGoyQMjkXxDaCgCc4bbEBqKwFAURWAoisBQFIGh
KAJDUQSGoggMRVEEhqIIDEURGIoiMBRFYChqMir5ElAjV2xCcE1gKCoOSWYgyS4Bh8BQYwUltfyk
hsezwCEw1NhgySLXthyrzcdZG2gIDDU2UM4BpjZuQ4ehJgdL7lyjKgClMrA0ugyBocYCi93W2G6O
j7DsAJbqnBxDYKihw5La/9sDRgHZRZwn6TIEhhoiLN4Wxngci17jJvlagu2cMo0lGTUpWPBISXvQ
V25g2ZrgX7WFhcBQQ4VFS63UcZIWmD0sGwCjSjgOgaFGBYs9e9UeVKwnexfgJhsoz3bha1s5c+tj
AkMNJdxbWNRV9nAsw+NTuNYDi9FdCoClBIDO2nySwFBDgAV7wrAEW4b2FNrKACOh7NJSTK8LuXCm
PoGhhhbuERaFBNtTAKYAd/mCsqyIlGAc6adGUYJlTl5RZ3n+f3sJj9o0x6ijrA0suZz2iLWesUxg
qD6B4pVgFhYtvxSQ19Ceg8Ms4L7WUmwrh3EZBKQWTu+nRlCG2XBfQrhfgbO8ATAvASQN+1UoxfQR
A36daASG6r2jSKQEKyGvLMBVFJY3gEbLsRmUYHUoyQoHlCoCCUf6qV7nFJtZ0FV0TOUJnOXVwKLA
aNjPIehvHFgqA0trdyEwVBcllwVEwFUwrywAlucILO/hUbuTS3CVnQPLTg4zlauEyxAYqnfg6KAi
jq+gq2C38YuB5R1geTbuonPFviOwIDQ1gaH6GuRtoFcVUIbZEiwGiz6+yKFnrAB3sXPGttA8hxGG
fqpvWcX2ftmesEUkr7wYUDC36EBlKYfu410CFgsNHYbqbfmFgGTgLjgYia6CzvJuQHmFUgznjNVy
PJ1/G9xG29bJMRyHoXpThuWOk0i4UXMHlmeAxesJe4MybCWHKTAihx4xBceDZevAQmCoXpRhCIv2
fO0gvxRyPHKPrvLqwPIKsDzJYUQ/AwAkAou2mLuwW5nqTfmFYV7dJYPPobPEQMGpLzqIiaUYrqLc
RYC5Or8QGOoePWGxxV26DqUOX8cxFgvLq+MqFhZc37JN5BYLTHVpfiEw1C2hsSXYHPLJVg4j8CKH
6S4rpwx7hc89Qwm2hDIsVYohMGs5dDPbwF8TGKrrgI8lmOaTdfjeebhR9XvUXaybxFzFwoLySrF1
i8Avwm5l6sHh3lvgpbB8h5uzhJxRRLKLhn7PVWZQhuUGErsjDMJiobkqvxAY6lJYcNd7L+ArLNor
tpTDgGIpx93IzwYU6yp2y6TMwBIL+l45dlV+ITDUrUqyAnLLMtyouiPLLNy0WI7hPDF0lJUc7/5S
OrCIyS1VpBzz3GV3DSwEhrrUXbygPzMhX3vDllCO5XI8XwzbEkCxJRjOP6tM9kBgtgaUpgFLditT
nYR9u96+BjjUXTL4HM5I9sqvUvwNxXHvYw+Wc3rHWJJRnZVjWJLV8PkFuE0mp/uJ2Z0qPVfxesTq
RDnmjb9cNR2GwFC3DP52npiA6+BfdW/pMeaU0oASgwWzi+cw1l3QYXAvZQJDdQKLyGHUXeDjGdyk
IqezAIoGUFKw2N6xptH9m+QXAkNdC46Ac6C7FE75480zw94vz1WyBCwVOMe2oRy7eDo/gaHu1Vum
11ULYDLn0a75j8kuOU6VY/roje4TGKozl9EyDHuzCnNjZg2tCRSR051fmgJ/bA0/HYbqNMvotbcN
q0SgkUj51QTLOeVYbDoMHYbq1GEsOG1dqS0oMZfxSrK20/k5DkP1Bhw5ExppAU2sHPPmkHkrLK92
FwJD3TPT1FcA0ibDpEoyr3fs6h4yAkM9Cp5bwuL1kG2dUswOWNa3+CVyvq/UAJQqyc4Zf7m6LCMw
VN9B8cqxVEkW6x27iQgMNRR3EQBgFwn9TVvC1gSGmho4nrtszfXNBywJDDX0DNMm8N+sd4zAUEOF
ZSd+L1kKlpsEfgJDDSXwN5VkXuC/aXcygaGG5i6xUX7PXe4S+AkMNSRwKvG7lLcSXyzGbmWKGSYB
izcGc1MRGGoIOaZpWkzMXW426ZLAUENzGIRg2yLwe+UYBy6pUTtLzF12LQL/TZ2FwFBDcRYb+lM9
ZKkd+gkMNbmSLDal/+Y7XBIYagz5pe0M5ZtPiSEw1FBgSa3hT5VkN50SQ2CoIQX+StKrLGNnwNxc
BIbqe+CvpHmVZSq/MMNQkw/8qT3I7rLSksBQQ8kvbdzlJkeKExhq6PklNvaS2hb2boGfwFB9d5fU
oUmxc2DoMNRkwWna5TJ1ypgww1BTdJjYkRZNpyTTYajJ5pdzdum/27QYAkMNwV12kezinZR8lyn9
BIYaAjSpA1+/IyXZXZYlExiqr+VYauxlHWkPyy+3AuZu9kexHDPZ5RuadZjqEcCUN3hikvglCdCp
Mr4EZ5VjMVhsfrEbX9wFnPKCJ+RBc7eR1RGCUhOgxnvKhn2E5ctA87D80haY+sxW8SY4C6Ka4CRh
WQMoXwaeph6yhwLTBgzbT57Dz2a8EVwnycQ/GHWK4HjuYneFQVi+jMOkesjqRwMj0n7X9H0r5PT4
aQJzDAW23IEnk/YHq47RXWx2QVj+hKYftxmDuTswsYzS1Ceu/04VwMkjf0mn7CgISW6aPbt+CtDU
DUEfSzELCzrM3SdcxoCpTWnQ9onMws9V4DR0mMPztpAUTsvluIt/Kq+Z3UbJ9or9cRoCk1rHf1dg
7F80b/KbwqK/+G+AZRe+NoPSLCMsR7AoHDN4nIU3uoTvn4LL1A33mVeKITCdlGOxDJN6EvpLf4Sf
VVj2X1uEzxGY0zKsCK+NQrKAN3rmdAZMpSSLnfeC99onNM9hHgZLU4bBUmwNT+KXgWUdboA5gXGB
KQGW/Wu0DDfFkxx2NrH5ph6xy8RK/k0Clt/wuVR+6aRb2Xsia8grhYHlMwAzC//e1PMLlmMFALMI
sKzCa6pvss04U3AZrxt5Y7KxgvLbcZjYHLKHOwy6CzrMN9TgAgH/i+4S7RnLAZZ5cJRVeLN38H0F
fG9lHGbMoDQF/d+mfQIs6y7yi9dLhoFTn0xuer4qk1vm4Dz2r+SU3SWHUmwRYHkJr2kNr6vmGiwv
xgiNV4ptndyCzvIrtE9TjsVg6TT02wwj0BGwCU/Ag4XAHAOj7vIVXjeFZW4yjZYXhZzOAM9GCEss
5CMov8BdYsBUj3wiTcBk4ZcT81dhDZmlkNPBSgJzcA8FRmEpAJSnyF/MMcMS60K2sHwYYLzesYeF
/VQvWSankyi9mrNwyjCO7h/3jmk5Zp1lD8qznI4n2Bp/7M6ybglLL9wl5TAC4d6GtDw82TwS8jkd
5ji/bOB1w/IsdgOMZXnEJbB8mGbzSyddyU3A2N6yzPk4Ngdq6vIcRl+zGZRgdgHU3bc47UEZViVg
UUB+hmYdJjb28nCVDU8YnQbBqMwNQmBOgcFxlpn4a9EfcmpWzzILwoKu8i8A8zPSO9b5a1We8eQt
GFmkHCE0h25hCWVrm93mH95F+sAyzA6AIyw/Ayz79gMcxrrLQ7aCvRYYD5qawDQCg7DsJH36bxM0
2cBAEfGXhNi5iArLD2j/GmBS7tLJH5VL1/SLAw7X8ftlWZWAZifpY+aGnFcsLLYMU0f5J7QfUI7Z
kf1ORvVvAUybvEMd/5XFZl1la0BKlWZZj0ER8bdHSsHyj4EF3UWzCwb9XR9K1pL39d1vqtpxGe9Q
U3tT9HUsxjuDUsSfpq8B/xN6w9BZ/usA0ya7DNphqGZYUufMD6G3rE5cWwfVWey6s4uFRYHxYPll
SrFN314TAnN/YGKLpNqc0dhl8K8bSrDKlGCVHO/1gHPDsDfsR6QUi8HS6bgLgXncjZbJ+cc2pEqP
R4BTtyi/rKt4O1Ri17EN+bZX7MPJLd58sV7kZQLzuLLMTmdPnXVSPSjLNG3v661fqQHs2IZ7nw4s
/4o/3vIhh2n9Ckun018ITPe9SHYAzzunMXW46aUuU18ITJ1wFJvFMK98QWj/MKUYPuL0lz+Os/R2
bh2B6c5hvIOBvM21c6fMkxtBE+sariKOshX/CIovJ7PY+WHePDGEZSMDmIhKYO7vLrHQbw8Hsk4z
F39B2S3De9ttgL38Zfc81t4wLcV+yuns4w853tTiC/4tbxJq78b4CMz95XUrb5xS5suBppTDAr6m
3UTrhusmUGzJFTu9eC3+rpR2WTFO0celxp/ws975Lr1e4kBgHuM0laR3ELUNNxbJzgSmbglKJfHZ
CDgLwTtb0ttkzwLzCz5WULw/DDhg2/v1QATmsTnG7r8V291RN0XMAbgiAYwHhZdJmsquWE8euqH9
vXGjPbvLC+aUL4kf5DqYpQ0E5nG9ZHZTERuW9aZbBndRQHQr2XOBsaDYksebrpPqlPhOQG53p8Q9
xLzjKbYRV+n9vEQC83iH2Ym/+cMqwKK78Iic7lltd+Q5J5c0ZRTPVTxn+TYwoIPg7pT6vRjqPVep
WvTmEZgJQhNb066ly9LkFp1qskgAI4lcUjuApFylyVkQAnu40bf4p4OtTSaqnN9xULPdCczjyzJv
47p5BJYvA4zdcMT++7UDiHUUD5hNJNx70ODBrPZE4285HU+K9YANcik2geku+KvD/JbDlrL6vQrL
Uwtg2nQNxxrOmI7NQLBjRd5g68b8W7YjwTqgyEDXURGYx8kL/gUEeh3R30GphmVaLMPEer4qc9N6
sMRcZuMAgSWW5yJb5/8c3QnbBOZxZZmYsmwtp1vr4ja86C54KkKWcK/aASYFzlb8BW0b8Re5bZyf
80rAGCSDX51LYLoL/xsDgYL0HWDRXOMF/kzia+lTPWJtSrStA4X3vVULSEYDCoHpxmXs/m6ZnO7d
pZ0BWIpdA0x1IUje9zRBImMFhcB06zBafokBRnua2m703gRN3eJ6l+gwqCM/OylICEx3sGRyOlhn
gUFQ2pyK0GauWNP0GO/rVeJ3nRQkBKY/HQB4rXBs5fhksqbteNvORm7KGFULICYJCYq7VXb3unvN
Ozqkzd7Vsa2PmmCSCABNM58n/cZR3b72MTia9rJOAdMEgjR8jYAQmMGAE3tv2gJzzufqFj9DEZhB
vB/3AIZQEBi+R4SBoiiKoiiKoiiKoijqSv1PgAEAXGnb7GO+U78AAAAASUVORK5CYII=" transform="matrix(0.24 0 0 0.24 1.0127 3.0308)">
</image>
<g>
<g>
<g>
<path fill="#5AA72D" d="M36.909,38.27H4.013v-25.24c0-4.418,3.582-8,8-8h24.897V38.27z"/>
</g>
<g>
<g>
<path fill="#E3E3E3" d="M25.028,45.016c0,0-5.631-11.527,6.174-16.348c4.399-1.485,11.365-5.256,14.749-9.218
c0,0-1.29,4.308-2.463,10.356S41.759,45.914,25.028,45.016z"/>
</g>
<g>
<path fill="#959595" d="M25.331,44.598c3.581-3.054,19.385-23.054,19.385-23.054s-12.35,18.264-18.092,23.054H25.331z"/>
</g>
</g>
<g>
<g>
<path fill="#FFFFFF" d="M21.075,32.142c-2.143,0-4.355-0.798-5.309-3.42c-1.988,0.014-3.622-0.751-4.904-2.294
c-1.281-1.543-1.922-3.484-1.922-5.823c0-2.609,0.649-4.677,1.946-6.207s3.071-2.294,5.321-2.294
c2.026,0,3.67,0.751,4.932,2.252c1.262,1.501,1.893,3.456,1.893,5.864c0,2.138-0.444,3.934-1.333,5.387
c-0.754,1.234-2.135,2.237-3.428,2.727c0,0,0,1.69,2.813,1.69L21.075,32.142z M12.602,20.44c0,2.066,0.308,3.723,0.925,4.969
c0.616,1.246,1.421,1.87,2.413,1.87c1.065,0,1.902-0.597,2.51-1.792c0.608-1.195,0.912-2.866,0.912-5.013
c0-2.206-0.297-3.908-0.892-5.107c-0.595-1.199-1.41-1.798-2.445-1.798c-1.018,0-1.843,0.632-2.474,1.897
S12.602,18.389,12.602,20.44z"/>
<path fill="#FFFFFF" d="M31,28.344c-1,0.24-1.113,0.236-1.861,0.236c-2.04,0-3.139-1.13-3.139-3.39V19h-2v-2h2v-0.605
l0.601-2.841L28,13.558V17h3v2h-3v5.829c0,0.749,0.093,1.317,0.383,1.607c0.707,0.707,2.106,0.288,2.617,0.095V28.344z"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 39.1 (31720) - http://www.bohemiancoding.com/sketch -->
<title>user-trash-full</title>
<desc>Created with Sketch.</desc>
<defs>
<linearGradient x1="50%" y1="0%" x2="50%" y2="97.8595344%" id="linearGradient-1">
<stop stop-color="#FFFFFF" offset="0%"></stop>
<stop stop-color="#D3D3D3" offset="100%"></stop>
</linearGradient>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="user-trash-full">
<image id="Bitmap" x="2" y="7" width="60" height="56" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA4CAYAAAChbZtkAAAABGdBTUEAA1teXP8meAAAA2pJREFUaAXlmluP1DAMRne4CiQuD7zz/38eT9xZfKo53bR12jJih3qwFCV1nMx34mxaaXO6e7DTQ/OubTfucs37RvHQFsz6SQTQttbfjCvRBI7yq6kRfg+QUEA+wxnlRxSCK5s88I08T+MBh50AfosypJ+HwgbDzygkET6e72lgQNPBStyawQTbsJMBpkEh27dq7uSTGRb0tY0bqmUaMmxWeQD+VZSXUdj71Q+t58Hw9szDuTQcXGOqw6EB/SHKpyhVDy+S9/Gs/2vUAA+vKIGHEyycGhn/HKVqljmk2KkwADzu2HZLt9lkhdgCVU/tF6Edti9RvkcBGBtfS8KSUTop8wMtXGUM7XK4SwfGFkpoaoLavjKkZ6Foh6FlGrrmUG3AvO88V4kK7S3LKDqDIpCS9Y0DD94QWOhRbgYl8PCiHiNrNdAux0R5BkwAwbcAPIHlIQN2ZW4BGJaJZcAE/FcZFhhoP0zwVTE0u0sXmucZbgOrAwPb8gzwc2BXxMBev3FHrNGs/oW+HpADev2LiQ7kuAgY/UBX/htOc5Bl0OxSV3w1tR8dMEwsAzaA4LV+445Wu6VTXT0gs9zrTyc7iFPgRXbRtwbEgMpbOl3/HrAZrgx8UYZZpUrQak1hgdnKMAN7MYw/mqHV3ZlCZzAGOrDSu3j+HS3LmJgMeOw8r1ZF4JZh0l4DNsNrMZPJDvCAVnWncrZgGLwVk078j5wCd3++B+MqVQVW/wK8B2xgVWD1L+o1YFfJd9ti8AEdaFV3Km8NmAEMrgicwuJcA3alKgKjPbU1YAY4sAK0GtX8R8Bm17rCx0f7laXuBfSeDDO4GvACVMcWMHHVgGVL6y1gt8ZWXDr5lZ1oVG/3p/eAVPnnOCz+t/8iYFeL2hOwO9EBOtDYak4lbWXYCbbi0smv7ESjers/vQeESSqd0l1YOraAgeU2DDUX1o5qaGu1dnXuAeYg4K4T1/i4znc084ohGtubO6nOPVvVA4vFeRfFL5rNEzH9xb/jRBM37d5EeR+Fq4XtjTuynZowaWc46acAyUryI9xyo43P/mhezYBx+5JVYb1xZ38qiDuJa+ZK8XeMub0ZR8a3Fowxj2ECo4vrkd66W4VFyF7BZpJaUH3Mc20TjNq/W32rWvYCM0kb27ZXf+CRO4HU2ra+Rf0bOvj0yL4i8b8AAAAASUVORK5CYII="></image>
<path d="M11.7194173,54.8547905 C11.9328622,57.1478665 14.0117111,59 16.3634338,59 L47.6365662,59 C49.9756078,59 52.0674859,57.1441265 52.2805827,54.8547905 L56,15 C57.6897144,15 59,13.5330037 59,12 C59,10.4563085 57.5718954,9 56,9 L8,9 C6.43540907,9 5,10.4669963 5,12 C5,13.5436915 6.42810462,15 8,15 L11.7194173,54.8547905 Z" id="Combined-Shape" fill="url(#linearGradient-1)"></path>
<path d="M11.7194173,53.8547905 C11.9328622,56.1478665 14.0117111,58 16.3634338,58 L47.6365662,58 C49.9756078,58 52.0674859,56.1441265 52.2805827,53.8547905 L56,15 C57.6897144,15 59,13.5330037 59,12 C59,10.4563085 57.5718954,10 56,10 L8,10 C6.43540907,10 5,10.4669963 5,12 C5,13.5436915 6.42810462,15 8,15 L11.7194173,53.8547905 Z" id="Combined-Shape" fill="#F6F6F6"></path>
<path d="M13.698557,44.3787127 L14.1854636,49.9422602 L14.1881559,49.9431845 L14.4561404,53.1891895 C14.4561404,53.1891895 14.4561403,55.9721203 17.2631581,55.9721203 C17.8901613,55.9721203 20.001368,55.9721203 22.6098431,55.9721203 L23.5374037,55.9820829 L23.5437055,55.9721203 C27.0107364,55.9721203 31.1021885,55.9721203 33.7543862,55.9721203 C33.754386,55.9721207 43.2280702,55.9721202 46.0350877,55.9721202 C48.8421053,55.9721202 49.1228242,53.1891887 49.1228242,53.1891887 L51.257332,32.5400978 L49.6138251,32.2485287 L51.3407739,30.8471197 L45.223672,22.2023112 L34.3676082,29.9783265 L36.023599,25.9717216 L21.5238095,20.0504494 L17.534517,29.2674839 L14.7969924,27.8223201 L12.5343657,32.0071735 L13.2070325,39.1812079 L13.2453773,39.2005394 L13.4527573,41.5701282 L13.4516589,41.5725528 L13.6688273,44.3628846 L13.698557,44.3787127 L13.698557,44.3787127 L13.698557,44.3787127 Z" id="Combined-Shape" fill="#90A72F" opacity="0.4"></path>
<path d="M31.4852624,29.1551521 C28.6873677,23.5229359 25.7442098,28.0582872 25.7442098,28.0582872 L23.5126308,31.9178548 L28.106315,34.5367737 L31.4852624,29.1551521 Z M41.4199992,27.4297467 L38.9442098,28.7977467 L38.0368413,27.2346116 C38.0368413,27.2346116 37.3357887,25.6078008 33.8768413,25.7782872 C33.8768413,25.7782872 29.5905256,25.8953683 29.1442098,25.8152602 C29.1442098,25.8152602 30.3589466,26.0494224 30.9631571,26.9675845 L33.6999992,31.6919089 L31.6999992,32.7928818 L38.4115782,32.9346116 L41.4199992,27.4297467 Z M24.9694729,41.0522332 C21.497894,46.3085575 27.0010519,46.4092062 27.0010519,46.4092062 L31.5336834,46.2633683 L31.4431571,41.0727737 L24.9694729,41.0522332 Z M18.2999992,33.6699629 L20.7842098,35.0215305 L19.8831571,36.5887737 C19.8831571,36.5887737 18.826315,38.0225035 20.7736834,40.8119089 C20.7736834,40.8119089 23.1084203,44.3284494 23.2642098,44.7413143 C23.2642098,44.7413143 22.8368413,43.6074764 23.3273677,42.6256386 L26.0431571,37.8889899 L28.0494729,38.9796926 L24.6831571,33.3146116 L18.2999992,33.6699629 Z M39.2410519,40.2655305 C45.6389466,40.6599089 43.0431571,35.9273683 43.0431571,35.9273683 L40.6999992,32.1335305 L36.1021045,34.7462872 L39.2410519,40.2655305 Z M32.4557887,44.2853143 L35.8873677,38.6551521 L35.8873677,40.9002332 L41.4473677,40.9002332 C42.5652624,40.8386116 43.3715782,39.9204494 43.3715782,39.9204494 C43.0789466,40.2532062 41.0705256,43.9587197 41.0705256,43.9587197 C39.5252624,46.9781791 37.7273677,46.7768818 37.7273677,46.7768818 L35.8873677,46.7768818 L35.8873677,49.5498548 L32.4557887,44.2853143 Z" id="Fill-1" fill="#869D29"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="&#x56FE;&#x5C42;_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
<g>
<image overflow="visible" opacity="0.3" width="184" height="184" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAAC8CAYAAAAuPKG9AAAACXBIWXMAAC4jAAAuIwF4pT92AAAA
GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABlBJREFUeNrs24tu2zgQRmEplpO0
2bb7/q/ZNr5LmwAUMEtQtm7uBfkOQMipE9do/8OZoZWqAj4w9V/62vhYdH9ySGsS4DeFv/tdAtRX
vq5JgDuFvxv53F0FqAvXocfAmiJ0Vx7PkqBZGPyHEPrSIgLWDP7QaudWg2ZG+OsQ/qFFAtwr/G1h
1UGCLn3drSlAdSX4m/Q6m7CGRACmCFAK/iWtc3hcBwnatSvA0K7//rPbwjUXgQRYI/x92E8p/Pk1
0o5thZoR4S9VgG1aj2k9hcfbrCI8EAALBGjDjn9K65jWIeSrKrRAN1uhORWgCeF/fluf0npOIvQy
RAkIgLkCxPD3od+/rd1A+Lspc8CUITj2+9sU+M9v6yW79iLESvBgGMaM4bfNdv4++K8hW3VWLfL2
abYAdaH16QV4CgJ8SeufJMFLeu4xzAQPToQw4+SnDeE/pPD/TNnaZINvGwbjNus6uiUzQC5A3/9/
SmF/D/7Xt/UtXV/Sc0/hjW4IgBkCXELrs087/1PKbT0wH+QnQ4tngFIL1A++n5MA7+H/N12/JAny
WYAAmCpA7P3fd/8fWfijHE1ap5TVy5i/cIoAdUGA54IEsQoQAGsIcAh9fx/+Y5gJ+hPIeCpUryFA
6TOAKEEchF/S7v81CdG3QRuDMGYOwJcw/Pbhv6Twv6Z5ILbapQ9g6yUzQHVlEN4WKsFLWJ9Dv6YC
YEkF2GQ7/2tVPm3MD1xmV4B6oAqUJIgi9DJ8UgGwUgXoM9qHP37W1Ofv1p0Hg1VgzDHotROheCqU
fzr8aAbAChWgDq1QnrXFdxyMvRXi1t2gmzCFl26OixUAGCNCG3b+JstYUw3fgVzdYwYovejQLdGb
rELE54CplWCT5erarferV4BbIgyJUZJE64MpPFT//0T32i9czb7XrFn4Jus7fz8+7u7/S/K0RltS
j7AU+COzpS/Hh++zAAIABAAIABAAIABAAIAAAAEAAgAEAAgAEAAgAEAAgAAAAQACAAQACAAQACAA
QACAAAABAAIABAAIABAAIABAAIAAAAEAAgAEAAgAEAAgAEAAgAAAAQACAAQACAAQACAAQACAAAAB
AAIABAAB/BOAAAABAAIABAAIABAAIABAAIAAAAEAAgAEAAgAEAAgAEAAgAAAAQACAAQACAAQACAA
QACAAAABAAIABAAIABAAIABAAIAAAAEAAgAEAAgAEAAgAEAAgAAAAQACAAQACAAQACAAQACAAAAB
AAKAAAABAAIABAAIABAAIABAAIAAAAEAAgAEAAgAEAAgAEAAgAAAAQACAAQACAAQACAAQACAAAAB
AAIABAAIABAA+KsE6G4sYGm2qntlqVnhDd7z+4Eqk2DVzbVZYGU3sgK0b6vWbmHFrqIbyOJdBRgK
d74u4XpJ4a/9n2Ji1tqBFbPXLe0umhFvZKgE5aE/p3UJ10sIf5uuZMDYVuecZSmuITG6tQTosrDm
4e/fyClbx7Sa9PPv37MJLRABMLbTOGeZijk7ZyJ0c2aFZkT4u4Hwn7PQH9Lah/C36fEmvB4BMFaA
foPdp9Vn7BgkiBVi1QpQelN5+I8h9K9v6zkL/ymFXwXAnBYoCrBLGXvNhDhlrVFp5++WzAB5z98L
cAzB/5nCvw1tz/vzjyoAVqgAxyTA97f1I+Vtl1WDvB26SwWI4Y87/4/wWn34XwmAhQK0mQA/kwTf
gwT79Px5oAp0awnQFgR4Tbv+Jpz09OF/SgJsCIAFApxDG9RvtlGC/ZIqMLUFiqc+uyzcbTD1OYV/
G/p/AmDqHNBm8+YutEJ9O9TPBP1QPOlIdMwxaGkAPqRQP4Se/xSqwlMKf2MAxgpzwDnkaxfaoXwW
iEejNwfgJS1Q3NHjsLILrU+TVQjhx5IqECXYBxH606AY/lUqwLU3E8PchqrwmO38sf0hAJZUgfxD
10OYRY+hArTVhM8DxswA+Qdi/WSel6hD6PlL4ScA5goQJYjV4BQel3b/VStAlfVW56w85cEXfqwt
QbwFJ7/nLL83aBRT7watBixrQ+hLwScAls4C1+5AHrof6CZTglkXrnnYa+HHL5AgF6KrZv722Jxw
lkQYegzcU4TqyvVuApR+rh75HDA3+KWvF/9CzBrhrO/8+kA38c9/qQDCj98pAQAAAAAAAHCD/wQY
AEOMwqS8OgSgAAAAAElFTkSuQmCC" transform="matrix(0.24 0 0 0.24 1.9977 3.0225)">
</image>
<g>
<g>
<path fill="#45B0D7" d="M42.998,42.023c0,0.552-0.448,1-1,1h-36c-0.552,0-1-0.448-1-1v-36c0-0.552,0.448-1,1-1h36
c0.552,0,1,0.448,1,1V42.023z"/>
<rect x="6.998" y="7.023" fill="#FFFFFF" width="34" height="34"/>
<rect x="8.998" y="9.023" fill="#45B0D7" width="30" height="30"/>
<g>
<path fill="#FFFFFF" d="M16.048,35c-0.449,0-0.845-0.273-0.964-0.708L12.238,24H8v-2h5c0.45,0,0.845,0.301,0.964,0.734
l2.031,7.365l4.038-16.343c0.108-0.438,0.498-0.75,0.95-0.76c0.456,0,0.854,0.287,0.98,0.721l3.127,10.732l3.008-10.722
C28.22,13.296,28.613,13,29.062,13c0.002,0,0.003,0,0.005,0c0.449,0,0.843,0.303,0.96,0.737L33.891,28H40v2h-6.875
c-0.451,0-0.847-0.303-0.965-0.738L29.045,17.76l-2.974,10.555C25.95,28.744,25.56,29,25.113,29c-0.002,0-0.003,0-0.005,0
c-0.444,0-0.836-0.249-0.96-0.677l-3.065-10.5l-4.064,16.433C16.909,34.698,16.516,35,16.062,35C16.057,35,16.052,35,16.048,35z
"/>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -0,0 +1,3 @@
<svg width="1em" height="1em" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 89">
<path fill="#0b4dda" fill-rule="evenodd" d="M45.292 44.5 0 89h100V0H0l45.292 44.5zM90 80H22l35.987-35.2L22 9h68v71z"/>
</svg>

After

Width:  |  Height:  |  Size: 214 B

View File

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" version="1.1">
<circle style="opacity:0.2" cx="32" cy="33" r="28"/>
<circle style="fill:#992b2b" cx="32" cy="32" r="28"/>
<path style="opacity:0.2" d="m 33.58182,13.000023 c -1.115388,-0.0026 -1.97382,0.183308 -2.328264,0.580371 -0.562336,0.629947 -1.857402,5.326822 -3.473084,12.505882 -1.165672,5.166004 -0.355128,8.17861 0.44138,9.790972 1.018314,2.061364 1.810928,3.300018 0.201376,7.413682 -1.165698,2.979282 -2.354688,2.978996 -3.459288,3.120756 -2.662046,-0.647484 -4.672772,-0.66966 -4.935144,0.0586 -0.358912,0.996212 2.679032,3.585172 6.78065,5.079778 4.101618,1.494602 7.7238,1.900248 8.082712,0.904038 0.263232,-0.730638 -1.303218,-2.009794 -3.773772,-3.231104 -1.084566,-1.130306 -2.058868,-1.917706 -1.199992,-5.418658 1.680206,-6.848874 4.242608,-4.496448 7.263404,-8.753 2.562426,-3.610672 3.241818,-6.381924 4.72549,-10.614098 1.571992,-4.4841 2.2614,-6.560101 2.057918,-6.970024 -1.37051,-2.760946 -7.037222,-4.459387 -10.383386,-4.467183 z m -3.831702,9.121313 c 1.6194,1.79231 3.097928,2.825452 4.431494,2.878664 3.290768,0.1313 5.698856,-3.651028 7.162918,-1.731872 -0.704562,2.340602 -4.95059,16.51333 -10.609592,13.98192 -4.687802,-2.066842 -1.974364,-12.607284 -0.98482,-15.128712 z"/>
<path style="fill:#ffffff" d="m 33.58182,12.000023 c -1.115388,-0.0026 -1.97382,0.183308 -2.328264,0.580371 -0.562336,0.629947 -1.857402,5.326822 -3.473084,12.505882 -1.165672,5.166004 -0.355128,8.17861 0.44138,9.790972 1.018314,2.061364 1.810928,3.300018 0.201376,7.413682 -1.165698,2.979282 -2.354688,2.978996 -3.459288,3.120756 -2.662046,-0.647484 -4.672772,-0.66966 -4.935144,0.0586 -0.358912,0.996212 2.679032,3.585172 6.78065,5.079778 4.101618,1.494602 7.7238,1.900248 8.082712,0.904038 0.263232,-0.730638 -1.303218,-2.009794 -3.773772,-3.231104 -1.084566,-1.130306 -2.058868,-1.917706 -1.199992,-5.418658 1.680206,-6.848874 4.242608,-4.496448 7.263404,-8.753 2.562426,-3.610672 3.241818,-6.381924 4.72549,-10.614098 1.571992,-4.484099 2.2614,-6.560101 2.057918,-6.970024 -1.37051,-2.760946 -7.037222,-4.459387 -10.383386,-4.467183 z m -3.831702,9.121313 c 1.6194,1.79231 3.097928,2.825452 4.431494,2.878664 3.290768,0.1313 5.698856,-3.651028 7.162918,-1.731872 -0.704562,2.340602 -4.95059,16.51333 -10.609592,13.98192 -4.687802,-2.066842 -1.974364,-12.607284 -0.98482,-15.128712 z"/>
<path style="opacity:0.1;fill:#ffffff" d="M 32 4 A 28 28 0 0 0 4 32 A 28 28 0 0 0 4.0058594 32.490234 A 28 28 0 0 1 32 5 A 28 28 0 0 1 59.994141 32.488281 A 28 28 0 0 0 60 32 A 28 28 0 0 0 32 4 z"/>
<circle style="opacity:0.2" cx="47" cy="48" r="15"/>
<circle style="fill:#ffa407" cx="47" cy="47" r="15"/>
<path style="fill:#ffffff" d="M 47,52.925858 41.438,56 42.5,49.487858 38,44.876 44.219,43.925858 47,38 49.781,43.925858 56,44.876 51.5,49.487858 52.562,56 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

0
IconList.json Normal file → Executable file
View File

0
InstallDeepinWine6OnUbuntu.sh Normal file → Executable file
View File

0
InstallDeepinWineOnUbuntu.sh Normal file → Executable file
View File

View File

@@ -12,6 +12,7 @@
#################
import os
import sys
import requests
import updatekiller
import traceback
try:
@@ -56,10 +57,16 @@ try:
exitInputShow = int(os.getenv("ENTERNOTSHOW"))
except:
exitInputShow = True
headers = {
'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/130.0.0.0"
}
try:
# 获取最新版本的版本号
programVersionList = pyquery.PyQuery(url=f"http://mirrors.ustc.edu.cn/wine/wine/wine-{sys.argv[3]}/")
data = requests.get(f"http://mirrors.ustc.edu.cn/wine/wine/wine-{sys.argv[3]}/", headers=headers)
programVersionList = pyquery.PyQuery(data.text)
except:
traceback.print_exc()
print("无法连接下载服务器,将使用本地缓存")
if not os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/install.msi") or not os.path.exists(f"{homePath}/.cache/deepin-wine-runner/{sys.argv[3]}/information.txt"):
print("无本地缓存数据,无法进行、结束")
@@ -75,7 +82,8 @@ except:
exit()
programVersion = programVersionList("a:last-child").attr.href
# 获取最新版本安装包的URL
programUrl = pyquery.PyQuery(url=f"http://mirrors.ustc.edu.cn/wine/wine/wine-{sys.argv[3]}/{programVersion}")
data = requests.get(f"http://mirrors.ustc.edu.cn/wine/wine/wine-{sys.argv[3]}/{programVersion}", headers=headers)
programUrl = pyquery.PyQuery(data.text)
programDownloadUrl = ""
programFileName = ""
for i in programUrl("a").items():

View File

@@ -11,9 +11,6 @@ clean:
python3 RemovePycacheFile.py
rm *.deb -fv
rm *.pkg.tar* -fv
cd VM-source ; qmake . ; make clean
rm VM-source/VirtualMachine -rfv
rm -rfv VM-source/.qmake.stash
#package-rpm:
@@ -35,21 +32,14 @@ package-pkg:
sudo debtap -Q spark-deepin-wine-runner-ace.deb
copy-files:
#cd VM-source && qmake
#cd VM-source && make
#cd wine && make
make clean -j$(nproc)
mkdir deb/opt/apps/deepin-wine-runner/LANG -pv
cp -rv helperset deb/opt/apps/deepin-wine-runner/
#cp -rv VM-source/VirtualMachine VM
cp -rv VM-source/deepin-wine-runner.svg VM
cp -rv VM-source/Windows7X64Auto.iso VM
cp -rv VM-source/Windows7X86Auto.iso VM
cp -rv VM-source/test.qcow2 VM
cp -rv VM-source/*.fd VM
cp -rv wine/ deb/opt/apps/deepin-wine-runner/
cp -rv Test/ deb/opt/apps/deepin-wine-runner/
cp -rv dxvk/ deb/opt/apps/deepin-wine-runner
cp -rv dxvk/ deb/opt/apps/deepin-wine-runner/
cp -rv packager-config/ deb/opt/apps/deepin-wine-runner/
cp -rv information.json package-script
zip -v -q -r package-script.zip package-script
cp -rv InstallBox86-cn.sh deb/opt/apps/deepin-wine-runner/
@@ -108,7 +98,7 @@ copy-files:
cp -rv InstallVisualCPlusPlus.py deb/opt/apps/deepin-wine-runner
cp -rv launch.sh deb/opt/apps/deepin-wine-runner
cp -rv LICENSE deb/opt/apps/deepin-wine-runner
cp -rv mainwindow.py deb/opt/apps/deepin-wine-runner/deepin-wine-runner
cp -rv mainwindow.py deb/opt/apps/deepin-wine-runner/
cp -rv package-script.zip deb/opt/apps/deepin-wine-runner
cp -rv Run.bat deb/opt/apps/deepin-wine-runner
cp -rv RunVM.sh deb/opt/apps/deepin-wine-runner
@@ -146,6 +136,12 @@ copy-files:
cp -rv RemoveQemuUser.sh deb/opt/apps/deepin-wine-runner
cp -rv InstallBox86.sh deb/opt/apps/deepin-wine-runner
cp -rv InstallRuntime deb/opt/apps/deepin-wine-runner
cp -rv globalenv.py deb/opt/apps/deepin-wine-runner
cp -rv local deb/opt/apps/deepin-wine-runner
cp -rv WindowModule.py deb/opt/apps/deepin-wine-runner
cp -rv welcome.py deb/opt/apps/deepin-wine-runner
#cp -rv main.py deb/opt/apps/deepin-wine-runner/deepin-wine-runner
cp -rv mainwindow.py deb/opt/apps/deepin-wine-runner/deepin-wine-runner
mkdir -pv deb/opt/apps/deepin-wine-runner/entries/
cp -rv deb/usr/share/applications deb/opt/apps/deepin-wine-runner/entries/applications
python3 UpdateTime.py
@@ -181,8 +177,63 @@ copy-files:
remove-copy-files:
sudo rm -rfv /tmp/spark-deepin-wine-runner-builder
package-deb-to-amd64:
rm -rfv /tmp/wine-runner-package
dpkg -x spark-deepin-wine-runner.deb /tmp/wine-runner-package
dpkg -e spark-deepin-wine-runner.deb /tmp/wine-runner-package/DEBIAN
sudo chown -R root:root /tmp/wine-runner-package/opt
sudo chown -R root:root /tmp/wine-runner-package/usr
sed -i "s/Architecture: all/Architecture: amd64/g" /tmp/wine-runner-package/DEBIAN/control
dpkg-deb -Z xz -z 0 -b /tmp/wine-runner-package spark-deepin-wine-runner-amd64.deb
package-deb-to-arm64:
rm -rfv /tmp/wine-runner-package
dpkg -x spark-deepin-wine-runner.deb /tmp/wine-runner-package
dpkg -e spark-deepin-wine-runner.deb /tmp/wine-runner-package/DEBIAN
sudo chown -R root:root /tmp/wine-runner-package/opt
sudo chown -R root:root /tmp/wine-runner-package/usr
sed -i "s/Architecture: all/Architecture: arm64/g" /tmp/wine-runner-package/DEBIAN/control
dpkg-deb -Z xz -z 0 -b /tmp/wine-runner-package spark-deepin-wine-runner-arm64.deb
package-deb-to-mips64el:
rm -rfv /tmp/wine-runner-package
dpkg -x spark-deepin-wine-runner.deb /tmp/wine-runner-package
dpkg -e spark-deepin-wine-runner.deb /tmp/wine-runner-package/DEBIAN
sudo chown -R root:root /tmp/wine-runner-package/opt
sudo chown -R root:root /tmp/wine-runner-package/usr
sed -i "s/Architecture: all/Architecture: mips64el/g" /tmp/wine-runner-package/DEBIAN/control
dpkg-deb -Z xz -z 0 -b /tmp/wine-runner-package spark-deepin-wine-runner-mips64el.deb
package-deb-to-loongarch64:
rm -rfv /tmp/wine-runner-package
dpkg -x spark-deepin-wine-runner.deb /tmp/wine-runner-package
dpkg -e spark-deepin-wine-runner.deb /tmp/wine-runner-package/DEBIAN
sudo chown -R root:root /tmp/wine-runner-package/opt
sudo chown -R root:root /tmp/wine-runner-package/usr
sed -i "s/Architecture: all/Architecture: loongarch64/g" /tmp/wine-runner-package/DEBIAN/control
dpkg-deb -Z xz -z 0 -b /tmp/wine-runner-package spark-deepin-wine-runner-loongarch64.deb
package-deb-to-loong64:
rm -rfv /tmp/wine-runner-package
dpkg -x spark-deepin-wine-runner.deb /tmp/wine-runner-package
dpkg -e spark-deepin-wine-runner.deb /tmp/wine-runner-package/DEBIAN
sudo chown -R root:root /tmp/wine-runner-package/opt
sudo chown -R root:root /tmp/wine-runner-package/usr
sed -i "s/Architecture: all/Architecture: loong64/g" /tmp/wine-runner-package/DEBIAN/control
dpkg-deb -Z xz -z 0 -b /tmp/wine-runner-package spark-deepin-wine-runner-loong64.deb
package-deb-to-riscv64:
rm -rfv /tmp/wine-runner-package
dpkg -x spark-deepin-wine-runner.deb /tmp/wine-runner-package
dpkg -e spark-deepin-wine-runner.deb /tmp/wine-runner-package/DEBIAN
sudo chown -R root:root /tmp/wine-runner-package/opt
sudo chown -R root:root /tmp/wine-runner-package/usr
sed -i "s/Architecture: all/Architecture: riscv64/g" /tmp/wine-runner-package/DEBIAN/control
dpkg-deb -Z xz -z 0 -b /tmp/wine-runner-package spark-deepin-wine-runner-riscv64.deb
package-deb:
make copy-files -j$(nproc)
sudo chown -R root:root /tmp/spark-deepin-wine-runner-builder
dpkg-deb -Z xz -z 9 -b /tmp/spark-deepin-wine-runner-builder spark-deepin-wine-runner.deb
make remove-copy-files -j$(nproc)
# 构建 ace 包
@@ -210,6 +261,9 @@ package-termux-deb:
sudo cp deb-termux/DEBIAN /tmp/spark-deepin-wine-runner-builder/DEBIAN -rv
sudo cp -rv deb-termux/usr/share/applications /tmp/spark-deepin-wine-runner-builder/data/data/com.termux/files/usr/opt/apps/deepin-wine-runner/entries/applications
sudo cp -rv deb-termux/usr/share/applications /tmp/spark-deepin-wine-runner-builder/data/data/com.termux/files/usr/share/applications
# 加入 termux loader
sudo cp -rv mainwindow-termux-loader.sh /tmp/spark-deepin-wine-runner-builder/data/data/com.termux/files/usr/opt/apps/deepin-wine-runner/deepin-wine-runner
sudo cp -rv main.py /tmp/spark-deepin-wine-runner-builder/data/data/com.termux/files/usr/opt/apps/deepin-wine-runner/mainwindow.py
sudo bash builddeb/ChangeDebVersion.sh
dpkg-deb -Z xz -z 9 -b /tmp/spark-deepin-wine-runner-builder spark-deepin-wine-runner-termux.deb
make remove-copy-files -j$(nproc)

View File

@@ -13,15 +13,15 @@ programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
# 优先为深度终端
terminal = ""
terminalList = [
"gxde-terminal",
"deepin-terminal",
"deepin-terminal-gtk",
"mate-terminal",
"gnome-terminal",
"xfce4-terminal"
]
terminalEnd = {
f"{programPath}/../launch.sh\" \"deepin-terminal": ["-e", 0],
f"{programPath}/../launch.sh\" \"deepin-terminal-gtk": ["-e", 0],
"gxde-terminal": ["-e", 0],
"mate-terminal": ["-e", 1],
"gnome-terminal": ["--", 0],
"xfce4-terminal": ["-e", 1]
@@ -31,7 +31,7 @@ for i in terminalList:
if i == "deepin-terminal":
i = f"{programPath}/../launch.sh\" \"deepin-terminal"
if i == "deepin-terminal-gtk":
i = f"{programPath}/../launch.sh\" \"deepin-terminal-gtk"
i = f"{programPath}/../launch.sh\" \"gxde-terminal"
terminal = i
break
if terminal == "":
@@ -57,4 +57,4 @@ class TurnDeb():
def ToTarZst(self):
if os.system("debtap"):
raise NameError("无法找到 debtap 命令,请先安装 debtap")
os.system(f"debtap -Q '{self.debPath}'")
os.system(f"debtap -Q '{self.debPath}'")

View File

@@ -1,5 +1,5 @@
<p width=100px align="center"><img src="https://storage.deepin.org/thread/202208031419283599_deepin-wine-runner.png"></p>
<h1 align="center">Wine 运行器 3.9.2</h1>
<h1 align="center">Wine 运行器 4.0.0</h1>
<hr>
<a href='https://gitee.com/gfdgd-xi/deep-wine-runner/stargazers'><img src='https://gitee.com/gfdgd-xi/deep-wine-runner/badge/star.svg?theme=dark' alt='star'></img></a>
<a href='https://gitee.com/gfdgd-xi/deep-wine-runner/members'><img src='https://gitee.com/gfdgd-xi/deep-wine-runner/badge/fork.svg?theme=dark' alt='fork'></img></a>
@@ -27,7 +27,12 @@ Wine Runner is a program that allows Linux users to run Windows applications mor
打包器视频教程https://www.bilibili.com/video/BV1Bh4y1Q7nT/
Wine 运行器 QQ 交流群762985460
Wine 运行器离线包下载地址https://www.123pan.com/s/pDSKVv-pAJWv.html
### Wine 运行器 For Termux 安装方法以及注意事项
Wine 运行器 For Termux 使用的是独立的安装包,详细见:
见 https://gitee.com/gfdgd-xi/deep-wine-runner-termux
https://github.com/gfdgd-xi/deep-wine-runner-termux
### 如何手动下载 Wine
下载链接: http://ctfile.gfdgdxi.top/d/31540479-61624693-080e74?p=2061 (访问密码: 2061)
@@ -53,15 +58,8 @@ https://gfdgdxi.lanzouw.com/b0plly5cj
spark-deepin-wine-runner 是普通包spark-deepin-wine-runner-ace 是使用 ace 兼容环境运行的运行器
## Wine 运行器离线包
### X86
123panhttps://www.123pan.com/s/pDSKVv-pAJWv.html
百度网盘https://pan.baidu.com/s/1klBw63tw2_ZQLzmi11dDBw?pwd=7bu5 提取码: 7bu5
诚通网盘http://ctfile.gfdgdxi.top/d/31540479-59254792-909739?p=2061 (访问密码: 2061)
Githubhttps://github.com/gfdgd-xi/deep-wine-runner/releases/
Sourceforgehttps://sourceforge.net/projects/deep-wine-runner/files/
更多需求需要私聊作者定制(有偿服务)
### ARM
需要私聊作者定制(有偿服务)
见小黄鱼:
https://m.tb.cn/h.g93KHpR?tk=KPeR3dH09WM
## 软件架构
理论上支持全架构,如果 Python 能运行的话
@@ -159,6 +157,40 @@ desktop文件中StartupWMClass字段。用于让桌面组件将窗口类名与de
![image.png](https://storage.deepin.org/thread/202207190822204627_image.png)
## 更新日志
### 4.1.02024/09/15
**※1、修复在 GXDE OS 下无法正常调用 gxde-terminal 的问题**
**※2、修复部分机器无法打开应用的问题**
**※3、修改打包器 wine 集成封装 机制以便可以被 uos 商店正确签名**
**※4、打包器支持内置 spark dwine helper**
**※5、重构虚拟机安装模块以支持更多机器**
**6、修复打包器设置依赖无法生效的问题**
**※7、补充图标**
**※8、修复 deb 安装过程中可能出现 dpkg 卡死的问题**
**※9、优化 Wine 安装器检测机制**
**※10、删除部分废弃组件**
**※11、修复 AOSC、Termux 无法正常打开 Wine 运行器的问题**
12、修改文案
13、修复其它 bug 若干
### 4.0.02024/07/22
**※1、优化运行器窗口大小机制**
**※2、Wine 安装器支持根据机器实际情况自动推荐适合的 Wine**
**※3、Wine 安装器支持手动导入 Wine 7z 包并提供相应 7z 包的网盘下载地址**
**※4、兼容 Deepin 终端deepin 15 经典版本deepin-terminal-gtk**
**※5、跟进 dxvk 2.4**
**※6、修复 deepin 23 无法使用 Mono/Gecko 安装器的问题**
**※7、修复 debian testing 打包时会把 / 打入 .7z 包内导致系统死机的问题**
**※8、支持 AOSC安同、小小电脑、proot 容器**
**※9、支持在 Termux 直接运行(单独提供安装包)**
10、修复虚拟机启动器入口不会调用安装的 Qemu Extra 的问题
11、优化高级打包器容器名称生成机制
12、修复部分机器无法正常打开高级打包器的问题
13、修复高级打包器选择Wine封装入deb模式时helper只能使用spark dwine helper的问题
![](https://t.tutu.to/img/8NAdd)
![](https://t.tutu.to/img/8NWtw)
![](https://t.tutu.to/img/8NZho)
### 3.9.22024/06/29
**※1、移除冗余组件**
**※2、修复 Wine 安装器在文件下载失败后无法自动关闭进度条和解除控件禁用的问题**
@@ -813,11 +845,9 @@ make install -j4
## 请作者喝杯茶
如果您觉得 Wine 运行器对你有帮助,可以请作者喝杯茶
<img src="Icon/QR/Wechat.png" width="250" />
<img src="Icon/QR/Alipay.jpg" width="250" />
<img src="Icon/QR/QQ.png" width="250" >
### 广告
支付宝官方活动,扫描获得支付红包!
<p><img src="Icon/QR/advertisement0.jpg" width="250" ></p>
# ©2020-Now gfdgd xi
# ©2020-Now gfdgd xi

0
README_en.md Normal file → Executable file
View File

0
RunCommandWithTerminal.py Normal file → Executable file
View File

120
ShellList/turn-amd64-to-all.sh Executable file
View File

@@ -0,0 +1,120 @@
#!/bin/bash
# A simple loongarch64 => loong64 .deb converter to help traverse the worlds.
#
# Mingcong Bai <jeffbai@aosc.io>, 2024
_display_usage() {
printf "\
Usage:
loong64-it [PACKAGE1] [PACKAGE2] ...
- PACKAGE{1..N}: Path to the old-world .deb package to convert.
"
}
# Autobuild-like echo functions.
abwarn() { echo -e "[\e[33mWARN\e[0m]: \e[1m$*\e[0m"; }
aberr() { echo -e "[\e[31mERROR\e[0m]: \e[1m$*\e[0m"; exit 1; }
abinfo() { echo -e "[\e[96mINFO\e[0m]: \e[1m$*\e[0m"; }
abdbg() { echo -e "[\e[32mDEBUG\e[0m]: \e[1m$*\e[0m"; }
_convert_loong64() {
PKG_PATH=$(realpath $1)
PKG_NAME=$(dpkg-deb -f "$PKG_PATH" Package)
VERSION=$(dpkg-deb -f "$PKG_PATH" Version)
BASEDIR=$(dirname $PKG_PATH)
abinfo "Examining package information: $1 ..."
dpkg -I "$PKG_PATH" || \
aberr "Invalid dpkg package: control (metadata) archive not found: $?"
CONTROL_EXT="$(ar t "$PKG_PATH" | grep control.tar* | cut -f3 -d'.')"
case "${CONTROL_EXT}" in
gz)
TAR_COMP_FLAG="z"
;;
xz)
TAR_COMP_FLAG="J"
;;
bz2)
TAR_COMP_FLAG="j"
;;
"")
TAR_COMP_FLAG=""
;;
*)
aberr "Invalid control archive extension ${CONTROL_EXT}!"
;;
esac
abinfo "Unpacking: $1 ..."
cd $(mktemp -d) || \
aberr "Failed to create temporary directory to unpack $1: $?."
DEBDIR="$(pwd)"
ar xv "$PKG_PATH" || \
aberr "Failed to unpack $1: $?."
abinfo "Unpacking metadata archive: $1 ..."
mkdir "$DEBDIR"/metadata || \
aberr "Failed to create temporary directory for extracting the metdata archive from $1: $?."
tar -C "$DEBDIR"/metadata -xvf control.tar."${CONTROL_EXT}" || \
aberr "Failed to unpack metadata archive from $1: $?."
abinfo "Converting dpkg Architecture key: $1 ..."
#if ! egrep '^Architecture: loongarch64$' "$DEBDIR"/metadata/control; then
# aberr "Failed to detect a \"loongarch64\" architecture signature in control file - this is not a valid old-world LoongArch package!"
#fi
sed -e 's|^Architecture: amd64$|Architecture: all|g' \
-i "$DEBDIR"/metadata/control
abinfo "Building metadata archive (control.tar.${CONTROL_EXT}): $1 ..."
cd "$DEBDIR"/metadata
tar cvf${TAR_COMP_FLAG} "$DEBDIR"/control.tar."${CONTROL_EXT}" * || \
aberr "Failed to build metadata archive (control.tar.${CONTROL_EXT}) for $1: $?."
cd "$DEBDIR"
abinfo "Rebuilding dpkg package $1"
ar rv "$PKG_PATH" control.tar.${CONTROL_EXT} || \
aberr "Failed to rebuild dpkg package $1: $?."
#abinfo "Cleaning up: $1 ..."
#rm -r "$DEBDIR"
mv $1 ${BASEDIR}/${PKG_NAME}_${VERSION}_loong64.deb
abinfo """Your requested package:
$1
Has been successfully converted as a loong64 package and renamed as ${PKG_NAME}_${VERSION}_loong64.deb
However, you may still need to install libLoL for old-world applications to
work properly. Please refer to the libLoL home page:
https://liblol.aosc.io
For details on how to install and configure libLoL.
"""
}
# Display usage info if `-h' or `--help' is specified.
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
_display_usage
exit 0
fi
# Display usage info with directions if no option is specified.
if [ -z "$1" ]; then
abwarn "Please specify package(s) to convert.\n"
_display_usage
exit 1
fi
# Record working directory.
SRCDIR="$(pwd)"
# Rebuilding all requested packages.
for i in "$@"; do
_convert_loong64 $i
done

View File

@@ -12,7 +12,7 @@ CURRENT_DIR=$(cd $(dirname $0); pwd)
VBoxManage showvminfo Windows
if [[ 0 == $? ]]; then
# 检测到虚拟机存在,启动虚拟机
VBoxManage startvm Windows > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
VBoxManage startvm Windows > $TMPDIR/tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
exit
fi
# 检查是否有 QEMU
@@ -62,7 +62,7 @@ if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
fi
fi
else
qemuUEFI="-vga virtio -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 "
qemuUEFI="-vga virtio -machine usb=on -device usb-tablet "
fi
echo $qemuUEFI
./VM/kvm-ok
@@ -70,10 +70,11 @@ if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
echo X86 架构,使用 kvm 加速
$qemuMore qemu-system-x86_64 --enable-kvm -cpu host --hda "$HOME/Qemu/Windows/Windows.qcow2" \
-smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) \
-m ${use}G -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI \
-m ${use}G -display gtk -nic model=rtl8139 $qemuUEFI \
-device AC97 -device ES1370 -device intel-hda -device hda-duplex \
--boot 'splash=VM/boot.jpg,menu=on,splash-time=2000' \
> /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
-usb \
> $TMPDIR/tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
exit
fi
# 判断系统版本以选择 Qemu
@@ -93,16 +94,16 @@ if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
qemuPath="bwrap --dev-bind / / --bind ./VM/MipsQemu/usr/lib/mips64el-linux-gnuabi64/qemu/ui-gtk.so /usr/lib/mips64el-linux-gnuabi64/qemu/ui-gtk.so ./VM/MipsQemu/usr/bin/qemu-system-x86_64"
fi
fi
if [[ $qemuMore != "" ]]; then
if [[ $qemuMore == "" ]]; then
qemuPath=$qemuMore
fi
echo 不使用 kvm 加速
$qemuPath --hda "$HOME/Qemu/Windows/Windows.qcow2" \
-smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) \
-m ${use}G -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI \
-m ${use}G -display gtk -nic model=rtl8139 $qemuUEFI \
-device AC97 -device ES1370 -device intel-hda -device hda-duplex \
--boot 'splash=VM/boot.jpg,menu=on,splash-time=2000' \
> /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
> $TMPDIR/tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
exit
fi
cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep armhf
@@ -121,26 +122,26 @@ if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
if [[ $? == 0 ]] && [[ `arch` == "aarch64" ]]; then
$qemuMore qemu-system-arm --enable-kvm --hda "$HOME/Qemu/Windows/Windows.qcow2" \
-smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) \
-m ${use}G -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI \
-m ${use}G -display gtk -usb -nic model=rtl8139 $qemuUEFI \
-cpu max -M virt -device virtio-gpu-pci \
-device nec-usb-xhci,id=xhci,addr=0x1b \
-device usb-tablet,id=tablet,bus=xhci.0,port=1 \
-device usb-kbd,id=keyboard,bus=xhci.0,port=2 \
-device AC97 -device ES1370 -device intel-hda -device hda-duplex \
--boot 'splash=VM/boot.jpg,menu=on,splash-time=2000' \
> /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
> $TMPDIR/tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
exit
fi
$qemuMore qemu-system-arm --hda "$HOME/Qemu/Windows/Windows.qcow2" \
-smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) \
-m ${use}G -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI \
-m ${use}G -display gtk -usb -nic model=rtl8139 $qemuUEFI \
-cpu max -M virt -device virtio-gpu-pci \
-device nec-usb-xhci,id=xhci,addr=0x1b \
-device usb-tablet,id=tablet,bus=xhci.0,port=1 \
-device usb-kbd,id=keyboard,bus=xhci.0,port=2 \
-device AC97 -device ES1370 -device intel-hda -device hda-duplex \
--boot 'splash=VM/boot.jpg,menu=on,splash-time=2000' \
> /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
> $TMPDIR/tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
exit
fi
cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep aarch64
@@ -159,7 +160,7 @@ if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
if [[ $? == 0 ]] && [[ `arch` == "aarch64" ]]; then
$qemuMore qemu-system-aarch64 --enable-kvm --hda "$HOME/Qemu/Windows/Windows.qcow2" \
-smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) \
-m ${use}G -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI \
-m ${use}G -display gtk -usb -nic model=rtl8139 $qemuUEFI \
-cpu max -M virt \
-device virtio-gpu-pci \
-device nec-usb-xhci,id=xhci,addr=0x1b \
@@ -167,12 +168,12 @@ if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
-device usb-kbd,id=keyboard,bus=xhci.0,port=2 \
-device AC97 -device ES1370 -device intel-hda -device hda-duplex \
--boot 'splash=VM/boot.jpg,menu=on,splash-time=2000' \
> /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
> $TMPDIR/tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
exit
fi
$qemuMore qemu-system-aarch64 --hda "$HOME/Qemu/Windows/Windows.qcow2" \
-smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) \
-m ${use}G -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI \
-m ${use}G -display gtk -usb -nic model=rtl8139 $qemuUEFI \
-cpu max -M virt \
-device virtio-gpu-pci \
-device nec-usb-xhci,id=xhci,addr=0x1b \
@@ -180,7 +181,7 @@ if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
-device usb-kbd,id=keyboard,bus=xhci.0,port=2 \
-device AC97 -device ES1370 -device intel-hda -device hda-duplex \
--boot 'splash=VM/boot.jpg,menu=on,splash-time=2000' \
> /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
> $TMPDIR/tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 # 最新的 qemu 已经移除参数 -soundhw all
exit
fi

View File

@@ -6,15 +6,15 @@ echo ' # # #"""" #"""" #"# '
echo ' "mmm" "#mm" "#mm" # "m '
echo
echo
cd /tmp
cd $TMPDIR/tmp
echo 提示:
echo Geek Uninstaller 官网访问较慢,所以请耐心等待
aria2c -x 16 -s 16 https://geekuninstaller.com/geek.zip
unzip geek.zip
cd `dirname $0`
cp -rv /tmp/geek.exe ./
cp -rv $TMPDIR/tmp/geek.exe ./
if [[ $? == 0 ]];then
exit
fi
echo "拷贝失败,申请使用 sudo 拷贝"
sudo cp -rv /tmp/geek.exe ./
sudo cp -rv $TMPDIR/tmp/geek.exe ./

0
UpdateTime.py Normal file → Executable file
View File

View File

@@ -1 +0,0 @@
*.user*

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1 +0,0 @@
windows-virtual-machine-installer-for-wine-runner.gfdgdxi.top

View File

@@ -1,88 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SetupUILanguage>
<UILanguage>zh-CN</UILanguage>
</SetupUILanguage>
<InputLocale>zh-CN</InputLocale>
<SystemLocale>zh-CN</SystemLocale>
<UILanguage>zh-CN</UILanguage>
<UserLocale>zh-CN</UserLocale>
</component>
<component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<UserData>
<ProductKey>
<Key />
</ProductKey>
<AcceptEula>true</AcceptEula>
</UserData>
<ImageInstall>
<OSImage>
<InstallFrom>
<MetaData wcm:action="add">
<Key>/image/index</Key>
<Value>4</Value>
</MetaData>
</InstallFrom>
<InstallTo>
<DiskID>0</DiskID>
<PartitionID>1</PartitionID>
</InstallTo>
</OSImage>
</ImageInstall>
<DiskConfiguration>
<Disk wcm:action="add">
<CreatePartitions>
<CreatePartition wcm:action="add">
<Order>1</Order>
<Size>130000</Size>
<Type>Primary</Type>
</CreatePartition>
</CreatePartitions>
<DiskID>0</DiskID>
<WillWipeDisk>true</WillWipeDisk>
<ModifyPartitions>
<ModifyPartition wcm:action="add">
<Active>true</Active>
<Extend>false</Extend>
<Format>NTFS</Format>
<Label>OS</Label>
<Letter>C</Letter>
<Order>1</Order>
<PartitionID>1</PartitionID>
</ModifyPartition>
</ModifyPartitions>
</Disk>
</DiskConfiguration>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>
<Value>UABhAHMAcwB3AG8AcgBkAA==</Value>
<PlainText>false</PlainText>
</Password>
<DisplayName>Windows</DisplayName>
<Group>Administrators</Group>
<Name>Windows</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
<OOBE>
<NetworkLocation>Work</NetworkLocation>
<ProtectYourPC>3</ProtectYourPC>
</OOBE>
<TimeZone>China Standard Time</TimeZone>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ComputerName>*</ComputerName>
</component>
</settings>
<cpi:offlineImage cpi:source="wim:d:/sources/install.wim#Windows 7 ULTIMATE" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

View File

@@ -1,85 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SetupUILanguage>
<UILanguage>zh-CN</UILanguage>
</SetupUILanguage>
<InputLocale>zh-CN</InputLocale>
<SystemLocale>zh-CN</SystemLocale>
<UILanguage>zh-CN</UILanguage>
<UserLocale>zh-CN</UserLocale>
</component>
<component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<UserData>
<AcceptEula>true</AcceptEula>
</UserData>
<ImageInstall>
<OSImage>
<InstallFrom>
<MetaData wcm:action="add">
<Value>5</Value>
<Key>/image/index</Key>
</MetaData>
</InstallFrom>
<InstallTo>
<DiskID>0</DiskID>
<PartitionID>1</PartitionID>
</InstallTo>
</OSImage>
</ImageInstall>
<DiskConfiguration>
<Disk wcm:action="add">
<CreatePartitions>
<CreatePartition wcm:action="add">
<Type>Primary</Type>
<Order>1</Order>
<Size>130000</Size>
</CreatePartition>
</CreatePartitions>
<WillWipeDisk>true</WillWipeDisk>
<DiskID>0</DiskID>
<ModifyPartitions>
<ModifyPartition wcm:action="add">
<Active>true</Active>
<Extend>false</Extend>
<Format>NTFS</Format>
<Label>OS</Label>
<Letter>C</Letter>
<Order>1</Order>
<PartitionID>1</PartitionID>
</ModifyPartition>
</ModifyPartitions>
</Disk>
</DiskConfiguration>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>
<Value>UABhAHMAcwB3AG8AcgBkAA==</Value>
<PlainText>false</PlainText>
</Password>
<DisplayName>Windows</DisplayName>
<Group>Administrators</Group>
<Name>Windows</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
<OOBE>
<NetworkLocation>Work</NetworkLocation>
<ProtectYourPC>3</ProtectYourPC>
</OOBE>
<TimeZone>China Standard Time</TimeZone>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ComputerName>*</ComputerName>
</component>
</settings>
<cpi:offlineImage cpi:source="wim:l:/xiayuhao/system-iso/windows-iso/windows-7/windows-7-sp1-x86/sources/install.wim#Windows 7 ULTIMATE" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

View File

@@ -1,3 +0,0 @@
[autorun]
ICON=icon.ico
LABEL=<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -1,674 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. 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
them 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 prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. 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.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey 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;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If 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 convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU 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 that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
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.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
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.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
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
state 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 3 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, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program 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, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU 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. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,6 +0,0 @@
#!/bin/bash
sudo apt update
sudo apt install qemu-system qemu-user qemu-efi qemu-efi-aarch64 qemu-efi-arm -y
sudo apt install qemu-user-static binfmt-support qemu-system-gui -y
echo 安装完成!按回车键退出
read

View File

@@ -1,26 +0,0 @@
# Windows虚拟机安装工具
## 介绍
基于VirtualBox/Qemu制作的小白Windows虚拟机安装工具可以做到只需要用户下载系统镜像并点击安装即可无需顾及虚拟机安装、创建、虚拟机的分区等等
此为 Wine 运行器子项目https://gitee.com/gfdgd-xi/deep-wine-runner
依照 GPLV3 协议开源
![图片.png](https://storage.deepin.org/thread/202304092224497604_图片.png)
![图片.png](https://storage.deepin.org/thread/202304092224396099_图片.png)
![图片.png](https://storage.deepin.org/thread/202304092224315599_图片.png)
## 如何使用
安装最新版本的 Wine 运行器即可,最新版本的 Wine 运行器自带此安装工具
## 编译指南
```bash
git clone https://gitee.com/gfdgd-xi/windows-virtual-machine-installer-for-wine-runner.git
cd windows-virtual-machine-installer-for-wine-runner
qmake .
make -j4
```
## 预编译版本
https://gitee.com/gfdgd-xi/deep-wine-runner/tree/main/VM
# ©2020~2023 gfdgd xi

View File

@@ -1,109 +0,0 @@
#!/bin/bash
# 使用系统默认的 bash 运行
###########################################################################################
# 作者gfdgd xi
# 版本1.7.0
# 更新时间2022年07月15日
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 的 tkinter 构建
###########################################################################################
cd `dirname $0`
VBoxManage showvminfo Windows
if [[ 0 == $? ]]; then
# 检测到虚拟机存在,启动虚拟机
VBoxManage startvm Windows > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
exit
fi
# 检查是否有 QEMU
which qemu-system-x86_64
if [[ $? == 0 ]] && [[ -f "$HOME/Qemu/Windows/Windows.qcow2" ]]; then
if [[ -f "$HOME/.config/deepin-wine-runner/QemuSetting.json" ]]; then
echo 有设置文件,读设置文件
cd `dirname $0`
python3 ./VM/StartQemu.py
exit
fi
# 查看CPU个数
CpuSocketNum=`cat /proc/cpuinfo | grep "cpu cores" | uniq | wc -l`
# 查看CPU核心数
CpuCoreNum=`grep 'core id' /proc/cpuinfo | sort -u | wc -l`
# 查看逻辑CPU的个数
CpuCount=`cat /proc/cpuinfo| grep "processor"| wc -l`
# 总内存大小GB
MemTotal=`awk '($1 == "MemTotal:"){printf "%.2f\n",$2/1024/1024}' /proc/meminfo`
use=$(echo "scale=4; $MemTotal / 3" | bc)
cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep amd64
if [[ $? == 0 ]] || [[ ! -e ~/.config/deepin-wine-runner/QEMU-ARCH ]]; then
# amd64 架构
if [[ -f $HOME/.config/deepin-wine-runner/QEMU-EFI ]]; then
echo 使用 UEFI 启动
if [[ -f /usr/share/qemu/OVMF.fd ]]; then
qemuUEFI="--bios /usr/share/qemu/OVMF.fd"
else
if [[ -f `dirname $0`/VM/OVMF.fd ]]; then
qemuUEFI="--bios `dirname $0`/VM/OVMF.fd"
fi
fi
echo $qemuUEFI
fi
./VM/kvm-ok
if [[ $? == 0 ]] && [[ `arch` == "x86_64" ]]; then
echo X86 架构,使用 kvm 加速
qemu-system-x86_64 --enable-kvm -cpu host --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
exit
fi
echo 不使用 kvm 加速
qemu-system-x86_64 --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1
exit
fi
cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep armhf
if [[ $? == 0 ]]; then
# armhf 架构
# 寻找 UEFI 固件
if [[ -f /usr/share/AAVMF/AAVMF32_CODE.fd ]]; then
qemuUEFI="--bios /usr/share/AAVMF/AAVMF32_CODE.fd"
else
if [[ -f ./VM/AAVMF32_CODE.fd ]]; then
qemuUEFI="--bios ./VM/AAVMF32_CODE.fd"
fi
fi
echo $qemuUEFI
./VM/kvm-ok
if [[ $? == 0 ]] && [[ `arch` == "aarch64" ]]; then
qemu-system-arm --enable-kvm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
qemu-system-arm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
cat ~/.config/deepin-wine-runner/QEMU-ARCH | grep aarch64
if [[ $? == 0 ]]; then
# aarch64 架构
# 寻找 UEFI 固件
if [[ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]]; then
qemuUEFI="--bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd"
else
if [[ -f ./VM/QEMU_AARCH64_EFI.fd ]]; then
qemuUEFI="--bios ./VM/QEMU_AARCH64_EFI.fd"
fi
fi
echo $qemuUEFI
./VM/kvm-ok
if [[ $? == 0 ]] && [[ `arch` == "aarch64" ]]; then
qemu-system-aarch64 --enable-kvm --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
qemu-system-aarch64 --hda "$HOME/Qemu/Windows/Windows.qcow2" -soundhw all -smp $CpuCount,sockets=$CpuSocketNum,cores=$(($CpuCoreNum / $CpuSocketNum)),threads=$(($CpuCount / $CpuCoreNum / $CpuSocketNum)) -m ${use}G -net user,hostfwd=tcp::3389-:3389 -display vnc=:5 -display gtk -usb -nic model=rtl8139 $qemuUEFI -cpu max -M virt -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1
exit
fi
fi
zenity --question --no-wrap --text="检查到您未创建所指定的虚拟机,是否创建虚拟机并继续?\n如果不创建将无法使用"
if [[ 1 == $? ]]; then
# 用户不想创建虚拟机,结束
exit
fi
./VM/VirtualMachine

View File

@@ -1,78 +0,0 @@
#-------------------------------------------------
#
# Project created by QtCreator 2022-07-12T13:39:19
#
#-------------------------------------------------
QT += core gui
TRANSLATIONS += zh_CN.ts\
en_US.ts
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = VirtualMachine
TEMPLATE = app
QT += network
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++11
SOURCES += \
main.cpp \
mainwindow.cpp \
buildvbox.cpp \
vbox.cpp \
command.cpp \
infoutils.cpp \
qemu.cpp \
qemusetting.cpp
HEADERS += \
mainwindow.h \
buildvbox.h \
vbox.h \
command.h \
infoutils.h \
qemu.h \
qemusetting.h
FORMS += \
mainwindow.ui \
qemusetting.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += \
trans.qrc \
图标.qrc
DISTFILES += \
en_US.qm \
en_US.ts
# 编译时拷贝所需文件
file_need.files += Windows7X64Auto.iso \
Windows7X86Auto.iso \
kvm-ok \
AAVMF32_CODE.fd \
deepin-wine-runner.svg \
OVMF.fd \
QEMU_AARCH64_EFI.fd \
QEMU_EFI_LOONG64_7.1.fd \
test.qcow2
file_need.path += $$OUT_PWD
COPIES += file_need
system(chmod 777 $$OUT_PWD/kvm-ok)

View File

@@ -1,347 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 9.0.2, 2024-06-01T15:39:37. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{4ffd6df9-1365-4837-81b1-582e0e2d1f21}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="qlonglong">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
<value type="bool" key="EditorConfiguration.tintMarginArea">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">2</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">桌面</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">桌面</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{b17c65ba-6912-41bf-b5c1-4c7446f6c967}</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">部署</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ab20853c-9d79-473a-820e-8e95c145170e}</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/building/deep-wine-runner/VM-source</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/building/deep-wine-runner/VM-source</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">构建</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">部署</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="qlonglong">2</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -1,214 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.8.2, 2023-07-12T19:05:39. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{4ffd6df9-1365-4837-81b1-582e0e2d1f21}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ab20853c-9d79-473a-820e-8e95c145170e}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">VirtualMachine</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">VirtualMachine.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">20</value>
</data>
<data>
<variable>Version</variable>
<value type="int">20</value>
</data>
</qtcreator>

View File

@@ -1,347 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 7.0.1, 2023-11-07T19:30:53. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{4ffd6df9-1365-4837-81b1-582e0e2d1f21}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">2</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.6 in PATH (qt5)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ab20853c-9d79-473a-820e-8e95c145170e}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/building/deep-wine-runner/VM-source</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/building/deep-wine-runner/VM-source</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/building/deep-wine-runner/VM-source</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">桌面</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">桌面</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{b17c65ba-6912-41bf-b5c1-4c7446f6c967}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/gfdgd_xi/Desktop/deep-wine-runner/build-VirtualMachine-unknown-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/gfdgd_xi/Desktop/deep-wine-runner/VM-source/VirtualMachine.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/build-VirtualMachine-unknown-Debug</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">2</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

Binary file not shown.

View File

@@ -1,125 +0,0 @@
################################################
# 作者gfdgd xi
# 版本1.0
# 依照 GPL V3 协议开源
################################################
# 参考文献:
# https://juejin.cn/post/7080484519328874510
################################################
import os
import subprocess
homePath = os.path.expanduser('~')
programPath = os.path.split(os.path.realpath(__file__))[0]
class File:
def __init__(self, path) -> None:
self.path = path
def getFileFolderSize(self):
"""get size for file or folder"""
totalSize = 0
if not os.path.exists(self.path):
return totalSize
if os.path.isfile(self.path):
totalSize = os.path.getsize(self.path) # 5041481
return totalSize
if os.path.isdir(self.path):
with os.scandir(self.path) as dirEntryList:
for curSubEntry in dirEntryList:
curSubEntryFullPath = os.path.join(self.path, curSubEntry.name)
if curSubEntry.is_dir():
curSubFolderSize = self.path(curSubEntryFullPath) # 5800007
totalSize += curSubFolderSize
elif curSubEntry.is_file():
curSubFileSize = os.path.getsize(curSubEntryFullPath) # 1891
totalSize += curSubFileSize
return totalSize
class Manager:
def __init__(self, name: str, managerPath: str="VBoxManage") -> None:
self.name = name
self.managerPath = managerPath
self.vboxVersion = subprocess.getoutput(f"\"{self.managerPath}\" -v")
def Create(self, type: str="Windows7") -> None:
os.system(f"\"{self.managerPath}\" createvm --name \"{self.name}\" --ostype \"{type}\" --register")
def CreateDisk(self, path: str, size: int) -> None:
os.system(f"\"{self.managerPath}\" createvdi --filename \"{path}\" --size \"{size}\"")
def CreateDiskControl(self, controlName: str="storage_controller_1") -> None:
os.system(f"\"{self.managerPath}\" storagectl \"{self.name}\" --name \"{controlName}\" --add ide")
def MountDisk(self, diskPath: str, controlName: str="storage_controller_1", port: int=0, device: int=0) -> None:
os.system(f"\"{self.managerPath}\" storageattach \"{self.name}\" --storagectl \"{controlName}\" --type hdd --port {port} --device {device} --medium \"{diskPath}\"")
def MountISO(self, isoPath: str, controlName: str="storage_controller_1", port: int=1, device: int=0) -> None:
os.system(f"\"{self.managerPath}\" storageattach \"{self.name}\" --storagectl \"{controlName}\" --type dvddrive --port {port} --device {device} --medium \"{isoPath}\"")
def BootFirst(self, bootDrive: str) -> None:
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --boot1 {bootDrive}")
def SetNetBridge(self, netDriver: str) -> None:
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --nic1 bridged --cableconnected1 on --nictype1 82540EM --bridgeadapter1 \"{netDriver}\" --intnet1 brigh1 --macaddress1 auto")
#os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --nic1 hostif")
pass
def SetCPU(self, number: int) -> None:
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --cpus {number}")
def SetMemory(self, memory: int) -> None:
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --memory {memory}")
def SetRemote(self, setting: bool) -> None:
if setting:
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --vrde on")
return
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --vrde off")
def SetRemoteConnectSetting(self, port: int=5540) -> None:
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --vrdeport {port} --vrdeaddress """)
def Start(self, unShown: bool = False) -> None:
if unShown:
os.system(f"\"{self.managerPath}\" startvm \"{self.name}\" -type headless")
return
os.system(f"\"{self.managerPath}\" startvm \"{self.name}\"")
def Stop(self) -> None:
os.system(f"\"{self.managerPath}\" controlvm \"{self.name}\" poweroff")
def Delete(self) -> None:
os.system(f"\"{self.managerPath}\" unregistervm --delete \"{self.name}\"")
def SetDisplayMemory(self, memory: int) -> None:
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --vram {memory}")
def InstallGuessAdditions(self, controlName: str="storage_controller_1", port: int=1, device: int=0) -> None:
self.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", controlName, port, device)
def EnabledAudio(self) -> None:
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --audio pulse --audiocontroller hda --audioin on --audioout on")
#os.system("")
def EnabledClipboardMode(self):
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --clipboard-mode bidirectional")
def EnabledDraganddrop(self):
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --draganddrop bidirectional")
def ShareFile(self, name, path):
os.system(f"\"{self.managerPath}\" sharedfolder add \"{self.name}\" -name \"{name}\" -hostpath \"{path}\"")
def SetVBoxSVGA(self):
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --graphicscontroller vboxsvga")
def SetMousePS2(self):
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --mouse usb")
def SetKeyboardPS2(self):
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --keyboard usb")
def OpenUSB(self):
os.system(f"\"{self.managerPath}\" modifyvm \"{self.name}\" --usbohci on")
pass

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -1,12 +0,0 @@
#!/bin/bash
#cd `dirname $0`
bin=$1
nasm -f bin $1 -o `basename $1`.bin
if [[ $? != 0 ]];then
exit
fi
sudo modprobe nbd 8
sudo qemu-nbd `dirname $0`/test.qcow2 --connect /dev/nbd0
sudo dd if=`basename $1`.bin of=/dev/nbd0
sudo qemu-nbd -d /dev/nbd0
kvm --hda `dirname $0`/test.qcow2 -rtc base=localtime

View File

@@ -1,316 +0,0 @@
/*
* gfdgd xi
* 依照 GPLV3 开源
*/
#include <sys/sysinfo.h>
#include "buildvbox.h"
#include "vbox.h"
#include <QFile>
#include <QDir>
#include <QNetworkInterface>
#include <QMessageBox>
#include <QCoreApplication>
#include <infoutils.h>
#include "qemu.h"
#include <QProcess>
// 懒得用 QThread 了(要继承)
#include <thread>
using namespace std;
// 清屏
void buildvbox::CleanScreen(){
if(QFile::exists("/etc/os-version")){
// Unix
system("clear");
return;
}
// Windows
system("cls");
}
// 获取 CPU 个数
int buildvbox::GetCPUSocket(){
// 获取命令返回值
QProcess process;
process.start("bash", QStringList() << "-c" << "cat /proc/cpuinfo | grep \"cpu cores\" | uniq | wc -l");
process.waitForStarted();
process.waitForFinished();
int value = process.readAllStandardOutput().toInt();
process.close();
// 判断异常值,例如没挂载 /proc
if(value <= 0){
value = 1;
}
return value;
}
// 获取 CPU 核心数
int buildvbox::GetCPUCore(){
QProcess process;
process.start("bash", QStringList() << "-c" << "grep 'core id' /proc/cpuinfo | sort -u | wc -l");
process.waitForStarted();
process.waitForFinished();
int value = process.readAllStandardOutput().toInt();
process.close();
// 判断异常值,例如没挂载 /proc
if(value <= 0){
value = 1;
}
return value;
}
QString buildvbox::GetNet(){
QList<QNetworkInterface> netList = QNetworkInterface::allInterfaces();
foreach(QNetworkInterface net, netList){
qDebug() << "Device:" << net.name();
QList<QNetworkAddressEntry> entryList = net.addressEntries();
foreach(QNetworkAddressEntry entry, entryList){
QString ip = entry.ip().toString();
qDebug() << "IP Address: " << ip;
if(ip != "127.0.0.1" && ip != "192.168.250.1" && ip != "::1" && net.name() != "lo"){
// 返回网卡名称
return net.name();
}
}
}
return "";
}
int buildvbox::Download(QString url, QString path, QString fileName){
return system(("aria2c -x 16 -s 16 -c " + url + " -d " + path + " -o " + fileName).toUtf8());
}
buildvbox::buildvbox(QString isoPath, int id, int vm){
QString programPath = QCoreApplication::applicationDirPath();
QString net = GetNet();
qDebug() << "使用网卡:" << net << endl;
if(vm == 0){
// Qemu
qemu vm("Windows");
bool setISOAlready = 0;
switch (id) {
case 0:
vm.Create("Windows7");
vm.SetDisplayMemory(32);
break;
case 1:
vm.Create("Windows7_64");
vm.SetDisplayMemory(32);
break;
case 2:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
break;
case 3:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
vm.EnabledUEFI(true);
break;
case 4:
vm.Create("Windows11_64");
vm.SetDisplayMemory(128);
vm.EnabledUEFI(true);
setISOAlready = 1;
break;
case 5:
vm.Create("WindowsXP_32");
vm.SetDisplayMemory(32);
setISOAlready = 1;
break;
case 6:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
setISOAlready = 1;
break;
case 7:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
vm.EnabledUEFI(true);
setISOAlready = 1;
break;
case 8:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
vm.UseArmhfEFI();
setISOAlready = 1;
break;
case 9:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
vm.UseAarch64EFI();
setISOAlready = 1;
break;
}
vm.CreateDiskControl();
//vm.CreateDiskControl("storage_controller_2");
if(id == 0 || id == 1) {
vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072);
}
else {
vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072 * 5);
}
//vm.MountDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2");
vm.MountMainDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2");
if(QFile::exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/resources/virtio-win.iso")) {
vm.MountISO("/opt/apps/deepin-wine-runner-qemu-system-extra/files/resources/virtio-win.iso", "storage_controller_2", 1, 3);
}
if(!setISOAlready){
vm.MountISO(isoPath, "storage_controller_1", 0, 1);
switch (id) {
case 0:
if(QFile::exists(programPath + "/Windows7X86Auto.iso")) {
vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 2);
}
break;
case 1:
if(QFile::exists(programPath + "/Windows7X64Auto.iso")) {
vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 2);
}
break;
}
}
else{
//vm.AutoInstall(isoPath);
if(isoPath != ""){
vm.MountMainISO(isoPath);
}
}
vm.SetCPU(get_nprocs(), GetCPUSocket(), GetCPUCore());
long memory = 0;
long memoryAll = 0;
long swap = 0;
long swapAll = 0;
infoUtils::memoryRate(memory, memoryAll, swap, swapAll);
vm.SetMemory(memoryAll / 3 / 1024);
vm.SetNetBridge(net);
vm.EnabledAudio();
vm.EnabledClipboardMode();
vm.EnabledDraganddrop();
vm.SetVBoxSVGA();
vm.SetMousePS2();
vm.SetKeyboardPS2();
vm.OpenUSB();
vm.ShareFile("ROOT", "/");
vm.ShareFile("HOME", QDir::homePath());
switch(id){
case 8:
vm.StartArmhf();
break;
case 9:
vm.StartAarch64();
break;
default:
vm.Start();
break;
}
}
else if(vm == 1){
// VirtualBox
vbox vm("Windows");
bool setISOAlready = 1;
switch (id) {
case 0:
vm.Create("Windows7");
vm.SetDisplayMemory(32);
break;
case 1:
vm.Create("Windows7_64");
vm.SetDisplayMemory(32);
break;
case 2:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
break;
case 3:
vm.Create("WindowsNT_64");
vm.EnabledUEFI(true);
vm.SetDisplayMemory(32);
break;
case 4:
vm.Create("Windows11_64");
vm.SetDisplayMemory(128);
vm.EnabledUEFI(true);
setISOAlready = 1;
break;
case 5:
vm.Create("WindowsXP_32");
vm.SetDisplayMemory(32);
setISOAlready = 1;
break;
case 6:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
setISOAlready = 1;
break;
case 7:
vm.Create("WindowsNT_64");
vm.SetDisplayMemory(32);
vm.EnabledUEFI(true);
setISOAlready = 1;
break;
}
QDir dir("/home/gfdgd_xi/Qemu/Windows/");
dir.mkpath("/home/gfdgd_xi/Qemu/Windows/");
vm.CreateDiskControl();
//vm.CreateDiskControl("storage_controller_2");
if(id == 0 || id == 1) {
vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072);
}
else {
vm.CreateDisk(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", 131072 * 5);
}
vm.MountDisk(QDir::homePath() + "/VirtualBox VMs/Windows/Windows.vdi");
if(!setISOAlready){
vm.MountISO(isoPath, "storage_controller_1", 0, 1);
switch (id) {
case 0:
if(QFile::exists(programPath + "/Windows7X86Auto.iso")) {
vm.MountISO(programPath + "/Windows7X86Auto.iso", "storage_controller_1", 1, 0);
}
break;
case 1:
if(QFile::exists(programPath + "/Windows7X64Auto.iso")) {
vm.MountISO(programPath + "/Windows7X64Auto.iso", "storage_controller_1", 1, 0);
}
break;
}
}
else{
vm.AutoInstall(isoPath);
}
// 判断 VirtualBox Guest ISO 是否存在
// 在的话直接挂载
if(QFile::exists("/usr/share/virtualbox/VBoxGuestAdditions.iso")){
vm.MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", "storage_controller_1", 1, 1);
}
// VirtualBox 的 CPU 数量设置方法和 Qemu 不一样
vm.SetCPU(GetCPUCore(), GetCPUSocket(), GetCPUCore());
long memory = 0;
long memoryAll = 0;
long swap = 0;
long swapAll = 0;
infoUtils::memoryRate(memory, memoryAll, swap, swapAll);
//memoryRate(memory, memoryAll, swap, swapAll);
vm.SetMemory(memoryAll / 3 / 1024);
vm.SetNetBridge(net);
vm.EnabledAudio();
vm.EnabledClipboardMode();
vm.EnabledDraganddrop();
vm.SetVBoxSVGA();
vm.SetMousePS2();
vm.SetKeyboardPS2();
vm.OpenUSB();
vm.ShareFile("ROOT", "/");
vm.ShareFile("HOME", QDir::homePath());
vm.Start();
}
}

View File

@@ -1,21 +0,0 @@
/*
* gfdgd xi
* 依照 GPLV3 开源
*/
#ifndef BUILDVBOX_H
#define BUILDVBOX_H
#include <QString>
class buildvbox
{
// Q_OBJECT
public:
buildvbox(QString isoPath, int id=0, int vm=0);
void CleanScreen();
QString GetNet();
int Download(QString url, QString path, QString fileName);
int GetCPUSocket();
int GetCPUCore();
};
#endif // BUILDVBOX_H

View File

@@ -1,18 +0,0 @@
/*
* gfdgd xi
* 依照 GPLV3 开源
*/
#include "command.h"
#include <QProcess>
Command::Command()
{
}
QString Command::GetCommand(QString command){
QProcess process;
process.start(command);
process.waitForStarted();
process.waitForFinished();
return QString::fromLocal8Bit(process.readAllStandardOutput());
}

View File

@@ -1,16 +0,0 @@
/*
* gfdgd xi
* 依照 GPLV3 开源
*/
#ifndef COMMAND_H
#define COMMAND_H
#include <QString>
class Command
{
public:
Command();
QString GetCommand(QString command);
};
#endif // COMMAND_H

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

View File

@@ -1,602 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en" sourcelanguage="zh_CN">
<context>
<name>MainWindow</name>
<message>
<location filename="mainwindow.ui" line="14"/>
<source>Wine </source>
<translation>Wine Runner Virtual Machine Install Tools</translation>
</message>
<message>
<location filename="mainwindow.ui" line="32"/>
<location filename="mainwindow.ui" line="35"/>
<source></source>
<translation>Setting</translation>
</message>
<message>
<location filename="mainwindow.ui" line="43"/>
<source></source>
<translation>ISO FilePath:</translation>
</message>
<message>
<location filename="mainwindow.ui" line="50"/>
<source></source>
<translation>Please choose or input system image</translation>
</message>
<message>
<location filename="mainwindow.ui" line="57"/>
<source></source>
<translation>browser...</translation>
</message>
<message>
<location filename="mainwindow.ui" line="68"/>
<source></source>
<translation>System Version:</translation>
</message>
<message>
<location filename="mainwindow.ui" line="75"/>
<location filename="mainwindow.ui" line="79"/>
<source>Windows 7 32 </source>
<translation>Windows 7 32bit (support auto installing)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="84"/>
<source>Windows 7 64 </source>
<translation>Windows 7 64bit (support auto installing)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="89"/>
<source> Windows Windows 7 </source>
<translation>Other system (unsupport auto installing and using legacy boot)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="94"/>
<source> Windows UEFI Windows 8 </source>
<translation>Other system (unsupport auto installing and using UEFI boot)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="99"/>
<source> WIndows 11</source>
<translation>Install windows (unsupport auto installing)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="104"/>
<source> Windows XP VirtualBox</source>
<translation>Install other Windows XP (support auto installing but only support VirtualBox)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="109"/>
<source> Windows VirtualBox</source>
<translation>Install Other Windows (support auto installing and using legacy boot but only support VirtualBox)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="114"/>
<source> WindowsUEFI VirtualBox</source>
<translation>Install Other Windows (support auto installing and using UEFI boot but only support VirtualBox)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="119"/>
<source> arm32 Qemu</source>
<translation>Install arm32 system (only support Qemu/KVM)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="124"/>
<source> arm64 Qemu</source>
<translation>Install arm64 system (only support Qemu/KVM)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="136"/>
<source></source>
<translation>Virtual Machine:</translation>
</message>
<message>
<location filename="mainwindow.ui" line="143"/>
<location filename="mainwindow.ui" line="153"/>
<source>qemu/kvm</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="158"/>
<source>VirtualBox</source>
<translation></translation>
</message>
<message>
<location filename="mainwindow.ui" line="183"/>
<source> Qemu</source>
<translation>Install Qemu</translation>
</message>
<message>
<location filename="mainwindow.ui" line="190"/>
<source>kvm </source>
<translation>kvm test</translation>
</message>
<message>
<location filename="mainwindow.ui" line="197"/>
<source>Qemu虚拟机设置</source>
<translation>Qemu Setting</translation>
</message>
<message>
<location filename="mainwindow.ui" line="204"/>
<source>/Qemu磁盘</source>
<translation>Add/Replace Qemu Disk</translation>
</message>
<message>
<location filename="mainwindow.ui" line="211"/>
<source>Qemu磁盘</source>
<translation>Export Qemu Disk</translation>
</message>
<message>
<location filename="mainwindow.ui" line="218"/>
<source>Qemu磁盘</source>
<translation>Delete Qemu Disk</translation>
</message>
<message>
<location filename="mainwindow.ui" line="225"/>
<source>VirtualBox</source>
<translation>Get VirtualBox</translation>
</message>
<message>
<location filename="mainwindow.ui" line="232"/>
<source></source>
<translation>Install</translation>
</message>
<message>
<location filename="mainwindow.ui" line="241"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans CJK SC&apos;; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;UOS 3a4000 使 Qemu /&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://gfdgdxi.lanzoue.com/b01rk9wza&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gfdgdxi.lanzoue.com/b01rk9wza&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; 密码:6wvf&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Qemu / kvm Qemu&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;使 ISO &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;123 &lt;/span&gt;&lt;a href=&quot;https://www.123pan.com/s/pDSKVv-oypWv&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://www.123pan.com/s/pDSKVv-oypWv&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码35e5&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码: me4y&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt; Windows &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: &lt;/span&gt;&lt;a href=&quot;https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; 提取码: 7s2p &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;123&lt;/span&gt;&lt;a href=&quot;https://www.123pan.com/s/pDSKVv-uCBWv.html&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://www.123pan.com/s/pDSKVv-uCBWv.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="274"/>
<source>/使</source>
<translation>Document</translation>
</message>
<message>
<location filename="mainwindow.ui" line="283"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans CJK SC&apos;; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt;使 VirtualBox&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt; X86 PC使 qemu kvm使 Windows XP Windows 7&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline;&quot;&gt;/https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Ctrl&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt;qemu则是 Ctrl+Alt+G&lt;/span&gt; &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;VirtualBox &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Qemu Virtio &lt;a href=&quot;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712191756.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;使&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712192850.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712193527.png&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Windows 7 Windows 7 Windows XPWindows 10DeepinUbuntu &lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;1 Oracle VM VirtualBox &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;2Windows&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Manager_20220712223602.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;3&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox_20220712223705.png&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;使 VirtualBox&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;1&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;3&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;4&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//__20220712224639.png&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;1=&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture/_VirtualBox Machine_20220712142929.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2VirtualBox Guest AdditionsVBoxWindowsAdditions&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143006.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;3&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143018.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;4Next&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143029.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143037.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;5Install&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143044.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;6Reboot nowFinishReboot nowFinish&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143103.png&quot; /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="364"/>
<location filename="mainwindow.ui" line="482"/>
<source></source>
<translation>About</translation>
</message>
<message>
<location filename="mainwindow.ui" line="421"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans CJK SC&apos;; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; wine Wine Is Not An Emulator&amp;lt;Wine &amp;gt; Windows &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; C++ QtPython Virtualbox Windows Linux Windows exe &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; GPL V3 &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Gitee&lt;a href=&quot;https://gitee.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gitee.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Github&lt;a href=&quot;https://github.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://github.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Wine Wine Windows Windows exe &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;gfdgd xi&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="463"/>
<source></source>
<translation>Virtual Machine</translation>
</message>
<message>
<location filename="mainwindow.ui" line="477"/>
<source>退</source>
<translation>Exit</translation>
</message>
<message>
<location filename="mainwindow.ui" line="487"/>
<source>/</source>
<translation>Add/Replace</translation>
</message>
<message>
<location filename="mainwindow.ui" line="492"/>
<source></source>
<translation>Export</translation>
</message>
<message>
<location filename="mainwindow.ui" line="497"/>
<location filename="mainwindow.cpp" line="442"/>
<source></source>
<translation>Virtual Machine log (Installing)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="502"/>
<location filename="mainwindow.cpp" line="408"/>
<source></source>
<translation>Virtual Machine log (Running)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="507"/>
<source>X86Qemu</source>
<translation>Qemu Test (x86, qemu)</translation>
</message>
<message>
<location filename="mainwindow.ui" line="512"/>
<source> VirtualBox</source>
<translation>Stop VirtualBox with forced</translation>
</message>
<message>
<location filename="mainwindow.ui" line="517"/>
<source> Qemu</source>
<translation>Stop Qemu with forced</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="88"/>
<source>Wine </source>
<translation>Wine Runner Virtual Machine Install Tools </translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;p&gt;</source>
<translation>&lt;p&gt;Program Version:</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;/p&gt;&lt;p&gt;</source>
<translation>&lt;/p&gt;&lt;p&gt;Package build time:</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;/p&gt;&lt;p&gt;</source>
<translation>&lt;/p&gt;&lt;p&gt;Tools builded time:</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="92"/>
<source>&lt;hr/&gt;&lt;h1&gt;&lt;/h1&gt;</source>
<translation>&lt;hr/&gt;&lt;h1&gt;Thank&lt;/h1&gt;</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="179"/>
<location filename="mainwindow.cpp" line="186"/>
<location filename="mainwindow.cpp" line="193"/>
<location filename="mainwindow.cpp" line="200"/>
<location filename="mainwindow.cpp" line="215"/>
<location filename="mainwindow.cpp" line="222"/>
<location filename="mainwindow.cpp" line="229"/>
<location filename="mainwindow.cpp" line="248"/>
<location filename="mainwindow.cpp" line="254"/>
<location filename="mainwindow.cpp" line="263"/>
<location filename="mainwindow.cpp" line="307"/>
<location filename="mainwindow.cpp" line="322"/>
<location filename="mainwindow.cpp" line="328"/>
<location filename="mainwindow.cpp" line="332"/>
<location filename="mainwindow.cpp" line="338"/>
<location filename="mainwindow.cpp" line="357"/>
<location filename="mainwindow.cpp" line="360"/>
<location filename="mainwindow.cpp" line="364"/>
<location filename="mainwindow.cpp" line="367"/>
<location filename="mainwindow.cpp" line="392"/>
<location filename="mainwindow.cpp" line="404"/>
<location filename="mainwindow.cpp" line="438"/>
<source></source>
<translation>Tips</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="179"/>
<source> Qemu</source>
<translation>Can&apos;t find qemu, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="186"/>
<source> VBox</source>
<translation>Can&apos;t find VirtualBox, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="193"/>
<source> qemu-system-arm</source>
<translation>Can&apos;t find the qemu-system-arm, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="200"/>
<source> qemu-system-aarch64</source>
<translation>Can&apos;t find the qemu-system-aarch64, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="215"/>
<source> Windows7X86Auto.iso
Wine </source>
<translation>Can&apos;t find the Windows7X86Auto.iso, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="222"/>
<source> Windows7X64Auto.iso
Wine </source>
<translation>Can&apos;t find the Windows7X64Auto.iso, do you want to countinue to create the virtual machine?</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="229"/>
<source> UEFI
Qemu Qemu</source>
<translation>Can&apos;t find the UEFI boot, do you want to countinue to create the virtual machine?
You can get qemu efi from &quot;Install Qemu&quot; button</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="248"/>
<source>Qemu </source>
<translation>Qemu unsupport it</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="254"/>
<location filename="mainwindow.cpp" line="263"/>
<source>VirtualBox </source>
<translation>VirtualBox unsupport it</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="278"/>
<source></source>
<translation>Tips: It trying to start virtualbox now, you should view the log in the tools menu if you can&apos;t see the virtual machine window a few time late</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="307"/>
<source>
</source>
<translation>Qemu Disk is exist. Do you want to replace?
You will not recovery after you replacing!</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="311"/>
<source> Qemu </source>
<translation>Choose Qemu Disk</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="311"/>
<source>Qemu镜像(*.qcow2 *.img *.raw *.qcow *.qed *.vdi *.vhdx *.vmdk);;(*.*)</source>
<translation>Qemu Disk(*.qcow2 *.img *.raw *.qcow *.qed *.vdi *.vhdx *.vmdk);;All files(*.*)</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="322"/>
<location filename="mainwindow.cpp" line="328"/>
<source></source>
<translation>Add error!</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="332"/>
<source></source>
<translation>Add finishing!</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="338"/>
<source></source>
<translation>Can&apos;t export because can&apos;t find the qemu disk</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="357"/>
<source></source>
<translation>Can&apos;t delete because can&apos;t find the qemu disk</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="360"/>
<source>
</source>
<translation>Do you want to delete?
It can&apos;t recovery after you deleting!</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="364"/>
<source></source>
<translation>Delete error</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="367"/>
<source></source>
<translation>Delete successfully</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="373"/>
<location filename="mainwindow.cpp" line="389"/>
<source></source>
<translation>Error</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="373"/>
<source> kvm-ok
使 sudo apt install cpu-checker </source>
<translation>Can&apos;t find the command &quot;kvm-ok&quot; and you can use command &quot;sudo apt install cpu-checker&quot; to install</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="383"/>
<source>使</source>
<translation>Use</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="389"/>
<source>使 kvm
</source>
<translation>Your system can&apos;t use kvm:
</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="392"/>
<source>使 kvm
</source>
<translation>Your system can use kvm:
</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="404"/>
<location filename="mainwindow.cpp" line="438"/>
<source></source>
<translation>Can&apos;t find the log file</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="408"/>
<source></source>
<translation>Running file</translation>
</message>
<message>
<location filename="mainwindow.cpp" line="442"/>
<source></source>
<translation>Installed log</translation>
</message>
</context>
<context>
<name>QemuSetting</name>
<message>
<location filename="qemusetting.ui" line="14"/>
<source></source>
<translation>Setting</translation>
</message>
<message>
<location filename="qemusetting.ui" line="35"/>
<source>&lt;h3&gt;&lt;/h3&gt;</source>
<translation>&lt;h3&gt;Remote Service&lt;/h3&gt;</translation>
</message>
<message>
<location filename="qemusetting.ui" line="42"/>
<source>VNC服务端口</source>
<translation>VNC service port:</translation>
</message>
<message>
<location filename="qemusetting.ui" line="49"/>
<source> rdp </source>
<translation>Enable rdp port</translation>
</message>
<message>
<location filename="qemusetting.ui" line="56"/>
<source>MB</source>
<translation>Memory size (MB):</translation>
</message>
<message>
<location filename="qemusetting.ui" line="90"/>
<source>&lt;h3&gt;&lt;/h3&gt;</source>
<translation>&lt;h3&gt;Base setting&lt;/h3&gt;</translation>
</message>
<message>
<location filename="qemusetting.ui" line="97"/>
<source>VNC服务</source>
<translation>Enable VNC service</translation>
</message>
<message>
<location filename="qemusetting.ui" line="104"/>
<source> kvm </source>
<translation>Enable kvm</translation>
</message>
<message>
<location filename="qemusetting.ui" line="111"/>
<source>CPU核心数</source>
<translation>CPU cores:</translation>
</message>
<message>
<location filename="qemusetting.ui" line="125"/>
<source></source>
<translation>Enable sound</translation>
</message>
<message>
<location filename="qemusetting.ui" line="145"/>
<source></source>
<translation>Save</translation>
</message>
<message>
<location filename="qemusetting.ui" line="158"/>
<source></source>
<translation>Cancel</translation>
</message>
<message>
<location filename="qemusetting.ui" line="171"/>
<source>
</source>
<translation>Resetting</translation>
</message>
<message>
<location filename="qemusetting.ui" line="185"/>
<source>
Wine
</source>
<translation>Get Wine
Runner</translation>
</message>
</context>
</TS>

View File

@@ -1,218 +0,0 @@
/*
来自https://gitee.com/zinface/z-tools/tree/speedwidget-dev/src/SpeedWidget/infoUtils
依据 GPLV3 开源
*/
#include "infoutils.h"
#include <QFile>
#include <QTextStream>
#include <QtMath>
infoUtils::infoUtils(QObject *parent) : QObject(parent)
{
}
QString infoUtils::setRateUnitSensitive(infoUtils::RateUnit unit, infoUtils::Sensitive sensitive)
{
switch (sensitive) {
case Sensitive::Default: {
switch (unit) {
case RateUnit::RateBit:
return QString("b/s");
case RateUnit::RateByte:
return QString("B/s");
case RateUnit::RateKb:
return QString("Kb/s");
case RateUnit::RateMb:
return QString("Mb/s");
case RateUnit::RateGb:
return QString("Gb/s");
case RateUnit::RateTb:
return QString("Tb/s");
default:
// qDebug()<<QString("Sensitive::Default, RateUnit is RateUnknow.");
return QString("");
}
}
case Sensitive::Upper: {
switch (unit) {
case RateUnit::RateBit:
return QString("BIT/S");
case RateUnit::RateByte:
return QString("B/S");
case RateUnit::RateKb:
return QString("KB/S");
case RateUnit::RateMb:
return QString("MB/S");
case RateUnit::RateGb:
return QString("GB/S");
case RateUnit::RateTb:
return QString("TB/S");
default:
// qDebug()<<QString("Sensitive::Upper, RateUnit is RateUnknow.");
return QString("");
}
}
case Sensitive::Lower: {
switch (unit) {
case RateUnit::RateBit:
return QString("bit/s");
case RateUnit::RateByte:
return QString("b/s");
case RateUnit::RateKb:
return QString("kb/s");
case RateUnit::RateMb:
return QString("mb/s");
case RateUnit::RateGb:
return QString("gb/s");
case RateUnit::RateTb:
return QString("tb/s");
default:
// qDebug()<<QString("Sensitive::Lower, RateUnit is RateUnknow.");
return QString("");
}
}
default: {
// qDebug()<<QString("Sensitive is RateUnknow.");
return QString("");
}
}
}
double infoUtils::autoRateUnits(long speed, infoUtils::RateUnit &unit)
{
/* 自动判断合适的速率单位,默认传进来的是 Byte
* bit 0 ~ 7 位 (不到 1 字节)
* Byte 1 ~ 2^10 Byte
* KB 2^10 ~ 2^20 Byte
* MB 2^20 ~ 2^30 Byte
* GB 2^30 ~ 2^40 Byte
* TB 2^40 ~ 2^50 Byte
*/
if (unit != infoUtils::RateByte) {
// qDebug()<<"请先将单位转为字节(byte)后再传参";
return -1;
}
double sp = 0;
if (0 <= speed && speed < qPow(2, 10)) {
unit = infoUtils::RateByte;
sp = speed;
} else if (qPow(2, 10) <= speed && speed < qPow(2, 20)) {
unit = infoUtils::RateKb;
sp = static_cast<double>(speed / qPow(2, 10) * 1.0);
} else if (qPow(2, 20) <= speed && speed < qPow(2, 30)) {
unit = infoUtils::RateMb;
sp = static_cast<double>(speed / qPow(2, 20) * 1.0);
} else if (qPow(2, 30) <= speed && speed < qPow(2, 40)) {
unit = infoUtils::RateGb;
sp = static_cast<double>(speed / qPow(2, 30) * 1.0);
} else if (qPow(2, 40) <= speed && speed < qPow(2, 50)) {
unit = infoUtils::RateTb;
sp = static_cast<double>(speed / qPow(2, 40) * 1.0);
} else {
unit = infoUtils::RateUnknow;
// qDebug()<<"本设备网络速率单位传输超过 TB, 或者低于 0 Byte.";
sp = -1;
}
return sp;
}
void infoUtils::uptime(double &run, double &idle)
{
QFile file(PROC_UPTIME); // /proc/uptime
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
return;
}
QTextStream stream(&file);
QString line = stream.readLine();
QStringList list = line.split(QRegExp("\\s{1,}"));
if(!list.isEmpty()) {
run = list.at(0).toDouble();
idle = list.at(1).toDouble();
}
file.close();
}
void infoUtils::netRate(long &netDown, long &netUpload)
{
QFile file(PROC_NET); // /proc/net/dev
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { // 在读取时,把行尾结束符修改为 '\n' 在写入时把行尾结束符修改为本地系统换行风格比如Windows文本换行是 "\r\n"
return;
}
long down = 0;
long upload = 0;
QTextStream stream(&file);
QString line = stream.readLine();
line = stream.readLine();
line = stream.readLine();
while (!line.isNull()) {
line = line.trimmed();
QStringList list = line.split(QRegExp("\\s{1,}")); // 匹配任意 大于等于1个的 空白字符
if (!list.isEmpty()) {
down = list.at(1).toLong();
upload = list.at(9).toLong();
}
netDown += down;
netUpload += upload;
line = stream.readLine();
}
file.close();
}
void infoUtils::cpuRate(long &cpuAll, long &cpuFree)
{
cpuAll = cpuFree = 0;
bool ok = false;
QFile file(PROC_CPU); // /proc/stat
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
return;
}
QTextStream stream(&file);
QString line = stream.readLine();
if (!line.isNull()) {
QStringList list = line.split(QRegExp("\\s{1,}"));
for (auto v = list.begin() + 1; v != list.end(); ++v)
cpuAll += (*v).toLong(&ok);
cpuFree = list.at(4).toLong(&ok);
}
file.close();
}
void infoUtils::memoryRate(long &memory, long &memoryAll, long &swap, long &swapAll)
{
memory = memoryAll = 0;
swap = swapAll = 0;
bool ok = false;
QFile file(PROC_MEM); // /proc/meminfo
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream stream(&file);
long buff[16] = {0};
for (int i = 0; i <= 15; ++i) {
QString line = stream.readLine();
QStringList list = line.split(QRegExp("\\s{1,}"));
buff[i] = list.at(1).toLong(&ok);
}
memoryAll = buff[0];
memory = buff[0] - buff[2];
swapAll = buff[14];
swap = buff[14] - buff[15];
file.close();
}

View File

@@ -1,48 +0,0 @@
#ifndef INFOUTILS_H
#define INFOUTILS_H
#include <QObject>
#define PROC_UPTIME "/proc/uptime"
#define PROC_CPU "/proc/stat"
#define PROC_MEM "/proc/meminfo"
#define PROC_NET "/proc/net/dev"
class infoUtils : public QObject
{
Q_OBJECT
public:
enum RateUnit {
RateBit,
RateByte,
RateKb,
RateMb,
RateGb,
RateTb,
RateUnknow
};
Q_ENUM(RateUnit)
enum Sensitive {
Default, // 大小写混合
Upper, // 全部大写
Lower // 全部小写
};
public:
explicit infoUtils(QObject *parent = nullptr);
static QString setRateUnitSensitive(RateUnit unit, Sensitive sensitive);
static double autoRateUnits(long speed, RateUnit &unit);
static void uptime(double &run, double &idle);
static void netRate(long &netDown, long &netUpload);
static void cpuRate(long &cpuAll, long &cpuFree);
static void memoryRate(long &memory, long &memoryAll, long &swap, long &swapAll);
signals:
public slots:
};
#endif // INFOUTILS_H

View File

@@ -1,132 +0,0 @@
#!/bin/sh
#
# kvm-ok - check whether the CPU we're running on supports KVM acceleration
# Copyright (C) 2008-2010 Canonical Ltd.
#
# Authors:
# Dustin Kirkland <kirkland@canonical.com>
# Kees Cook <kees.cook@canonical.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3,
# as published by the Free Software Foundation.
#
# 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, see <http://www.gnu.org/licenses/>.
set -e
assert_root() {
if [ "$(id -u)" != "0" ]; then
echo "INFO: For more detailed results, you should run this as root"
echo "HINT: sudo $0"
exit 1
fi
}
verdict() {
# Print verdict
if [ "$1" = "0" ]; then
echo "KVM acceleration can be used"
exit 0
else
echo "KVM acceleration can NOT be used"
exit 1
fi
}
ARM_CPU_PART_CORTEX_A15="0xc0f" # <asm/cputype.h>
# check cpu flags for capability
case "$(uname -m)" in
armv7l)
if egrep -m1 -w '^CPU part[[:blank:]]*:' /proc/cpuinfo | \
egrep -wq "$ARM_CPU_PART_CORTEX_A15"; then
virt="ARM"
kvm_mod="kvm"
fi
;;
aarch64)
virt="ARM"
kvm_mod="kvm"
;;
ppc64le|ppc64|s390x)
# FIXME: Assume that all POWER and z/Systems are KVM capable
virt="generic"
kvm_mod="kvm"
;;
*)
virt=$(egrep -m1 -w '^flags[[:blank:]]*:' /proc/cpuinfo | egrep -wo '(vmx|svm)') || true
[ "$virt" = "vmx" ] && kvm_mod="kvm_intel"
[ "$virt" = "svm" ] && kvm_mod="kvm_amd"
;;
esac
if [ -z "$virt" ]; then
echo "INFO: Your CPU does not support KVM extensions"
assert_root
verdict 1
fi
# Now, check that the device exists
if [ -e /dev/kvm ]; then
echo "INFO: /dev/kvm exists"
verdict 0
else
echo "INFO: /dev/kvm does not exist"
echo "HINT: sudo modprobe $kvm_mod"
fi
assert_root
# Prepare MSR access
msr="/dev/cpu/0/msr"
if [ ! -r "$msr" ]; then
modprobe msr
fi
if [ -e "$msr" -a ! -r "$msr" ]; then
echo "You must be root to run this check." >&2
exit 2
fi
echo "INFO: Your CPU supports KVM extensions"
disabled=0
# check brand-specific registers
if [ "$virt" = "vmx" ]; then
BIT=$(rdmsr --bitfield 0:0 0x3a 2>/dev/null || true)
if [ "$BIT" = "1" ]; then
# and FEATURE_CONTROL_VMXON_ENABLED_OUTSIDE_SMX clear (no tboot)
BIT=$(rdmsr --bitfield 2:2 0x3a 2>/dev/null || true)
if [ "$BIT" = "0" ]; then
disabled=1
fi
fi
elif [ "$virt" = "svm" ]; then
BIT=$(rdmsr --bitfield 4:4 0xc0010114 2>/dev/null || true)
if [ "$BIT" = "1" ]; then
disabled=1
fi
elif [ "$virt" = "ARM" ]; then
# Should also test that we booted in HYP mode, if detectable
:
elif [ "$virt" = "generic" ]; then
:
else
echo "FAIL: Unknown virtualization extension: $virt"
verdict 1
fi
if [ "$disabled" -eq 1 ]; then
echo "INFO: KVM ($virt) is disabled by your BIOS"
echo "HINT: Enter your BIOS setup and enable Virtualization Technology (VT),"
echo " and then hard poweroff/poweron your system"
verdict 1
fi
verdict 0

View File

@@ -1,44 +0,0 @@
/*
* gfdgd xi
* 依照 GPLV3 开源
*/
#include "mainwindow.h"
#include <QApplication>
#include <QTranslator>
#include <QCoreApplication>
#include <QProcess>
#include <QMessageBox>
QString GetRunCommand(QString command){
QProcess process;
process.start(command);
process.waitForStarted();
process.waitForFinished();
QString re = process.readAllStandardOutput();
process.close();
return re;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 语言
QTranslator *trans = new QTranslator(&a);
if(!QProcessEnvironment::systemEnvironment().value("LANG").contains("zh_CN")){
trans->load(":/en_US.qm");
}
a.installTranslator(trans);
// 判断是否为 !amd64无需判断了
/*if(GetRunCommand("arch").replace(" ", "").replace("\n", "") != QString("x86_64")){
QMessageBox::critical(NULL, "错误", "此程序不支持非 X86 架构,立即退出");
return 0;
}*/
MainWindow w;
w.show();
return a.exec();
}

View File

@@ -1,484 +0,0 @@
/*
* gfdgd xi
* 依照 GPLV3 开源
*/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "buildvbox.h"
#include <QFileDialog>
#include <QDebug>
#include <QNetworkInterface>
#include <QProcess>
#include <QLoggingCategory>
#include <infoutils.h>
#include <QMessageBox>
#include <QTimer>
#include <QJsonParseError>
#include <QJsonValue>
#include <QJsonObject>
#include <QtMath>
#include <QJsonArray>
#include <QDesktopServices>
#include <QMessageBox>
#include <iostream>
#include <QIODevice>
#include <QInputDialog>
#include "qemusetting.h"
#include "vbox.h"
#include "qemu.h"
#include <QInputDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//QApplication a(argc, argv);
ui->tabWidget->setTabPosition(QTabWidget::West); // 标签靠左
// 选择最优虚拟机
if(!system("which qemu-system-x86_64")){
ui->vmChooser->setCurrentIndex(0);
}
if(!system("which vboxmanage")){
ui->vmChooser->setCurrentIndex(1);
}
if(!QFile::exists(QCoreApplication::applicationDirPath() + "/../RunCommandWithTerminal.py")){
ui->getQemu->setDisabled(true);
}
// 允许输出 qDebug 信息
QLoggingCategory::defaultCategory()->setEnabled(QtDebugMsg, true);
// 判断是否安装 vbox无需判断
/*if(system("which VBoxManage")){
if(QMessageBox::question(this, tr("提示"), "检测到您似乎没有安装 VirtualBox立即安装") == QMessageBox::Yes){
system("xdg-open https://www.virtualbox.org/wiki/Linux_Downloads");
}
}*/
// QTimer
QTimer *cpuGet = new QTimer(this);
connect(cpuGet, &QTimer::timeout, this, &MainWindow::ShowCPUMessage);
cpuGet->setInterval(1000);
cpuGet->start();
MainWindow::ShowCPUMessage();
// 读取程序版本号
// / 版本号文件是否存在
QFile fileinfo(QCoreApplication::applicationDirPath() + "/../information.json");
if(!fileinfo.exists()){
fileinfo.close();
return;
}
fileinfo.open(QIODevice::ReadOnly);
QJsonParseError error;
QJsonDocument doc = QJsonDocument::fromJson(fileinfo.readAll(), &error);
if(error.error != QJsonParseError::NoError){
QMessageBox::critical(this, "错误", "无法读取版本号!");
qDebug() << error.errorString();
fileinfo.close();
return;
}
QJsonObject versionObject = doc.object();
QJsonValue buildTime = versionObject.value("Time");
QJsonValue versionValue = versionObject.value("Version");
QJsonArray thank = versionObject.value("Thank").toArray();
QString thankText = "";
for (int i = 0; thank.count() > i; i++) {
thankText += "<p>" + thank.at(i).toString() + "</p>\n";
qDebug() << thank.at(i).toString();
}
// 设置程序标题
this->setWindowTitle(tr("Wine 运行器虚拟机安装工具 ") + versionValue.toString());
// 读取谢明列表
ui->textBrowser_2->setHtml(tr("<p>程序版本号:") + versionValue.toString() + ", " + GetRunCommand("arch") + tr("</p><p>安装包构建时间:") + buildTime.toString() + tr("</p><p>该组件构建时间:")
+ __DATE__ + " " + __TIME__ + "</p>" + ui->textBrowser_2->toHtml() +
tr("<hr/><h1>谢明列表</h1>") + thankText);
connect(ui->textBrowser_2, &QTextBrowser::anchorClicked, this, [=](const QUrl &link){
QDesktopServices::openUrl(link);
});
connect(ui->textBrowser, &QTextBrowser::anchorClicked, this, [=](const QUrl &link){
QDesktopServices::openUrl(link);
});
connect(ui->textBrowser_3, &QTextBrowser::anchorClicked, this, [=](const QUrl &link){
QDesktopServices::openUrl(link);
});
// 设置标签栏图标
ui->tabWidget->setTabIcon(1, QIcon::fromTheme(":/application-vnd.oasis.opendocument.text.svg"));
// 设置窗口图标
this->setWindowIcon(QIcon(":/deepin-wine-runner.svg"));
}
void MainWindow::ShowCPUMessage(){
// 获取 CPU 占用率
long cpuAll = 0;
long cpuFree = 0;
infoUtils::cpuRate(cpuAll, cpuFree);
long cpu = ((cpuAll - m_cpuAll) - (cpuFree - m_cpuFree)) * 100 / (cpuAll - m_cpuAll);
if(cpu > 100){
// 处理异常值
cpu = 100;
}
// 获取内存占用率
long memory = 0;
long memoryAll = 0;
long swap = 0;
long swapAll = 0;
infoUtils::memoryRate(memory, memoryAll, swap, swapAll);
// 获取开机时间
double run,idle;
infoUtils::uptime(run,idle);
int time = qFloor(run);
int ss = time % 60;
int MM = (time % 3600) / 60;
int hh = (time % 86400) / 3600;
int dd = time / 86400;
QString info = "CPU: " + QString::number(cpu) + "% 内存: " +
QString::number(memory * 100 / memoryAll) + "% " + QString::number(memory / 1024) + "MB/" + QString::number(memoryAll / 1024) + "MB" +
" 开机时间: " + QString::number(dd) + "" + QString::number(hh) + ":" + QString::number(MM) + ":" + QString::number(ss);
//qDebug() << cpuAll << " " << cpuFree;
if(!stopShowTime){
ui->CPUValue->showMessage(info, 5000);
}
m_cpuAll = cpuAll;
m_cpuFree = cpuFree;
//ui->retranslateUi(this);
}
QString MainWindow::GetRunCommand(QString command){
QProcess process;
process.start(command);
process.waitForStarted();
process.waitForFinished();
QString re = process.readAllStandardOutput();
process.close();
return re;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_browser_clicked()
{
// 浏览镜像文件
QString filePath = QFileDialog::getOpenFileName(this, "选择 ISO 文件", QDir::homePath(), "ISO 镜像文件(*.iso);;所有文件(*.*)");
if(filePath != ""){
ui->isoPath->setText(filePath);
}
}
void MainWindow::on_install_clicked()
{
switch (ui->vmChooser->currentIndex()) {
case 0:
if(system("which qemu-system-x86_64")){
if(QMessageBox::question(this, tr("提示"), tr("您似乎没有安装 Qemu是否继续创建虚拟机")) == QMessageBox::No){
return;
}
}
break;
case 1:
if(system("which vboxmanage")){
if(QMessageBox::question(this, tr("提示"), tr("您似乎没有安装 VBox是否继续创建虚拟机")) == QMessageBox::No){
return;
}
}
break;
case 8:
if(system("which qemu-system-arm")){
if(QMessageBox::question(this, tr("提示"), tr("无法检测到 qemu-system-arm是否继续创建虚拟机")) == QMessageBox::No){
return;
}
}
break;
case 9:
if(system("which qemu-system-aarch64")){
if(QMessageBox::question(this, tr("提示"), tr("无法检测到 qemu-system-aarch64是否继续创建虚拟机")) == QMessageBox::No){
return;
}
}
break;
}
QFile file(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI");
QFile archFile(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-ARCH");
QDir dir(QDir::homePath() + "/.config/deepin-wine-runner");
archFile.open(QIODevice::WriteOnly);
archFile.write("amd64");
archFile.close();
switch (ui->systemVersion->currentIndex()) {
case 0:
if(!QFile::exists(QCoreApplication::applicationDirPath() + "/Windows7X86Auto.iso")){
if(QMessageBox::question(this, tr("提示"), tr("似乎无法找到 Windows7X86Auto.iso是否继续创建虚拟机\n缺少该文件可能会导致虚拟机无法正常启动,尝试重新安装 Wine 运行器再试试?")) == QMessageBox::No){
return;
}
}
break;
case 1:
if(!QFile::exists(QCoreApplication::applicationDirPath() + "/Windows7X64Auto.iso")){
if(QMessageBox::question(this, tr("提示"), tr("似乎无法找到 Windows7X64Auto.iso是否继续创建虚拟机\n缺少该文件可能会导致虚拟机无法正常启动,尝试重新安装 Wine 运行器再试试?")) == QMessageBox::No){
return;
}
}
break;
case 3:
if(!QFile::exists("/usr/share/qemu/OVMF.fd") && !QFile::exists(QCoreApplication::applicationDirPath() + "/OVMF.fd") && ui->vmChooser->currentIndex() == 0){
if(QMessageBox::question(this, tr("提示"), tr("似乎无法找到 UEFI 固件,是否继续创建虚拟机?\nQemu 固件可以在“安装 Qemu”处安装")) == QMessageBox::No){
return;
}
}
if(!dir.exists()){
dir.mkpath(QDir::homePath() + "/.config/deepin-wine-runner");
}
if(!QFile::exists(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI")){
// 写入用于识别的空文件
file.open(QIODevice::WriteOnly);
file.write("1");
file.close();
}
break;
case 4:
case 5:
case 6:
case 7:
if(ui->vmChooser->currentIndex() == 0){
QMessageBox::warning(this, tr("提示"), tr("Qemu 不支持该选项!"));
return;
}
break;
case 8:
if(ui->vmChooser->currentIndex() == 1){
QMessageBox::warning(this, tr("提示"), tr("VirtualBox 不支持该选项!"));
return;
}
archFile.open(QIODevice::WriteOnly);
archFile.write("armhf");
archFile.close();
break;
case 9:
if(ui->vmChooser->currentIndex() == 1){
QMessageBox::warning(this, tr("提示"), tr("VirtualBox 不支持该选项!"));
return;
}
archFile.open(QIODevice::WriteOnly);
archFile.write("aarch64");
archFile.close();
break;
default:
if(ui->vmChooser->currentIndex() == 0 && QFile::exists(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI")){
QFile::remove(QDir::homePath() + "/.config/deepin-wine-runner/QEMU-EFI");
}
}
buildvbox(ui->isoPath->text(), ui->systemVersion->currentIndex(), ui->vmChooser->currentIndex());
ui->tabWidget->setCurrentIndex(1);
stopShowTime = 1;
ui->CPUValue->showMessage(tr("提示:目前已经尝试开启虚拟机,如果在一段时间后依旧还没看到虚拟机窗口开启,请在菜单栏查看虚拟机日志"), 10000);
return;
}
void MainWindow::on_getvbox_clicked()
{
QDesktopServices::openUrl(QUrl("https://www.virtualbox.org/wiki/Linux_Downloads"));
}
void MainWindow::on_getQemu_clicked()
{
system(("python3 '" + QCoreApplication::applicationDirPath() + "/../RunCommandWithTerminal.py' pkexec '" + QCoreApplication::applicationDirPath() + "/../QemuSystemInstall.sh'").toLatin1());
}
void MainWindow::on_vmChooser_currentIndexChanged(int index)
{
ui->qemuSetting->setDisabled(index);
}
void MainWindow::on_qemuSetting_clicked()
{
QemuSetting *show = new QemuSetting();
show->show();
}
void MainWindow::on_addQemuDisk_triggered()
{
if(QFile::exists(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
if(QMessageBox::question(this, tr("提示"), tr("磁盘文件已存在,是否覆盖?\n覆盖后将无法恢复!")) == QMessageBox::No){
return;
}
}
QString path = QFileDialog::getOpenFileName(this, tr("选择 Qemu 镜像"), QDir::homePath(), tr("Qemu镜像(*.qcow2 *.img *.raw *.qcow *.qed *.vdi *.vhdx *.vmdk);;所有文件(*.*)"));
qDebug() << path;
if(path == ""){
return;
}
QDir dir(QDir::homePath() + "/Qemu/Windows");
if(!dir.exists()){
dir.mkpath(QDir::homePath() + "/Qemu/Windows");
}
if(QFile::exists(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
if(!QFile::remove(QDir::homePath() + "/Qemu/Windows/Windows.qcow2") | !QFile::copy(path, QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
QMessageBox::critical(this, tr("提示"), tr("添加错误!"));
return;
}
}
else{
if(!QFile::copy(path, QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
QMessageBox::critical(this, tr("提示"), tr("添加错误!"));
return;
}
}
QMessageBox::information(this, tr("提示"), tr("添加完成!"));
}
void MainWindow::on_delQemuDisk_triggered()
{
if(!QFile::exists(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
QMessageBox::information(this, tr("提示"), tr("不存在磁盘文件,无法导出"));
return;
}
std::system(("xdg-open \"" + QDir::homePath() + "/Qemu/Windows/\"").toUtf8());
}
void MainWindow::on_addQemuDiskButton_clicked()
{
MainWindow::on_addQemuDisk_triggered();
}
void MainWindow::on_saveQemuDiskButton_clicked()
{
MainWindow::on_delQemuDisk_triggered();
}
void MainWindow::on_delQemuDiskButton_clicked()
{
if(!QFile::exists(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
QMessageBox::information(this, tr("提示"), tr("不存在磁盘文件,无法移除"));
return;
}
if(QMessageBox::question(this, tr("提示"), tr("是否删除?\n删除后将无法恢复!")) == QMessageBox::No){
return;
}
if(!QFile::remove(QDir::homePath() + "/Qemu/Windows/Windows.qcow2")){
QMessageBox::critical(this, tr("提示"), tr("移除失败"));
return;
}
QMessageBox::information(this, tr("提示"), tr("移除成功"));
}
void MainWindow::on_kvmTest_clicked()
{
if(system("which kvm-ok")&& !QFile::exists(QCoreApplication::applicationDirPath() + "/kvm-ok")){
QMessageBox::critical(this, tr("错误"), tr("未识别到命令 kvm-ok\n可以使用命令 sudo apt install cpu-checker 安装"));
return;
}
QString kvm_ok_path = "kvm-ok";
if(!system("which kvm-ok")){
kvm_ok_path = "kvm-ok";
}
else if(QFile::exists(QCoreApplication::applicationDirPath() + "/kvm-ok")){
kvm_ok_path = QCoreApplication::applicationDirPath() + "/kvm-ok";
}
qDebug() << tr("使用") << kvm_ok_path;
QProcess process;
process.start(kvm_ok_path);
process.waitForStarted();
process.waitForFinished();
if(process.exitCode()){
QMessageBox::critical(this, tr("错误"), tr("您的系统不支持使用 kvm\n") + process.readAll());
return;
}
QMessageBox::information(this, tr("提示"), tr("您的系统支持使用 kvm\n") + process.readAll());
}
void MainWindow::on_actionVMLog_triggered(){}
void MainWindow::on_actionVMRunlLog_triggered()
{
QFile file("/tmp/windows-virtual-machine-installer-for-wine-runner-run.log");
if(!file.exists()){
QMessageBox::information(this, tr("提示"), tr("没有日志文件"));
return;
}
file.open(QIODevice::ReadOnly);
QInputDialog::getMultiLineText(this, tr("运行日志"), tr("虚拟机运行日志"), file.readAll());
file.close();
}
void MainWindow::on_actionVMTest_triggered()
{
// 运行 Demo
if(QFile::exists(QCoreApplication::applicationDirPath() + "/test.qcow2")){
// 优先使用本地的磁盘
system(("qemu-system-i386 --hda '" + QCoreApplication::applicationDirPath() + "/test.qcow2' -rtc base=localtime > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1").toUtf8());
return;
}
// 写入 disk 文件
QFile file(":/TestDisk/test.qcow2");
// 计算随机数
QFile writeFile("/tmp/indows-virtual-machine-installer-for-wine-runner-test-disk.qcow2");
file.open(QIODevice::ReadOnly);
writeFile.open(QIODevice::WriteOnly);
writeFile.write(file.readAll());
file.close();
writeFile.close();
system("qemu-system-i386 --hda /tmp/indows-virtual-machine-installer-for-wine-runner-test-disk.qcow2 -rtc base=localtime > /tmp/windows-virtual-machine-installer-for-wine-runner-run.log 2>&1");
}
void MainWindow::on_actionVMInstallLog_triggered()
{
QFile file("/tmp/windows-virtual-machine-installer-for-wine-runner-install.log");
if(!file.exists()){
QMessageBox::information(this, tr("提示"), tr("没有日志文件"));
return;
}
file.open(QIODevice::ReadOnly);
QInputDialog::getMultiLineText(this, tr("安装日志"), tr("虚拟机安装日志"),file.readAll());
file.close();
}
void MainWindow::on_action_StopVirtualBox_triggered()
{
vbox vmControl("");
vmControl.Stop();
}
void MainWindow::on_action_StopQemu_triggered()
{
qemu vmControl("");
vmControl.Stop();
}
void MainWindow::on_actionQemuDiskAddSpace_triggered()
{
double data = QInputDialog::getDouble(this, tr("磁盘扩容"), "输入扩容多少GB\n1、扩容所需要的时间较长程序可能会出现假死的情况请不要关闭否则会导致虚拟磁盘损坏\n2、扩展后需要自行在虚拟机使用 Deepin Community Live CD、Live CD、Windows PE\n等工具调整系统分区大小才能使用");
if(data <= 0) {
return;
}
// 开始扩容
int result = qemu("").AddDiskSpace(QDir::homePath() + "/Qemu/Windows/Windows.qcow2", data);
qDebug() << "Exit Code: " << result;
if(result) {
QMessageBox::critical(this, tr("错误"), tr("扩容失败!"));
return;
}
QMessageBox::information(this, tr("提示"), tr("扩容完成!"));
}
void MainWindow::on_getDCLC_triggered()
{
QDesktopServices::openUrl(QUrl("https://github.com/gfdgd-xi/deepin-community-live-cd/"));
}

View File

@@ -1,72 +0,0 @@
/*
* gfdgd xi
* 依照 GPLV3 开源
*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void ShowCPUMessage();
void on_browser_clicked();
QString GetRunCommand(QString command);
void on_install_clicked();
void on_getvbox_clicked();
void on_getQemu_clicked();
void on_vmChooser_currentIndexChanged(int index);
void on_qemuSetting_clicked();
void on_addQemuDisk_triggered();
void on_delQemuDisk_triggered();
void on_addQemuDiskButton_clicked();
void on_saveQemuDiskButton_clicked();
void on_delQemuDiskButton_clicked();
void on_kvmTest_clicked();
void on_actionVMLog_triggered();
void on_actionVMRunlLog_triggered();
void on_actionVMTest_triggered();
void on_actionVMInstallLog_triggered();
void on_action_StopVirtualBox_triggered();
void on_action_StopQemu_triggered();
void on_actionQemuDiskAddSpace_triggered();
void on_getDCLC_triggered();
private:
bool stopShowTime = 0;
Ui::MainWindow *ui;
long m_cpuAll;
long m_cpuFree;
};
#endif // MAINWINDOW_H

View File

@@ -1,355 +0,0 @@
/*
* gfdgd xi
*/
#include "qemu.h"
#include <QDir>
#include <QFile>
#include <QCoreApplication>
#include "command.h"
#include <QMessageBox>
#include <QProcess>
#include <QDebug>
#include <iostream>
using namespace std;
qemu::qemu(QString name, QString managerPath)
{
if(!QFile::exists(name)){
this->name = QDir::homePath() + "/Qemu/" + name;
}
else{
this->name = name;
}
this->managerPath = managerPath;
//Command command = Command();
QString qemuPath = "qemu-system-i386";
if(QFile::exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh")) {
// 如果存在拓展 Qemu则调用此
qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-i386";
}
this->vboxVersion = Command().GetCommand(qemuPath + " --version");
}
int qemu::Create(QString type)
{
if(!QFile::exists(this->name)){
QDir dir(this->name);
dir.mkpath(this->name);
}
return 0;
}
int qemu::CreateDisk(QString path, int size)
{
if(QFile::exists(path)){
return 0;
}
return system(("qemu-img create -f qcow2 '" + path + "' " + QString::number(size) + "M").toLatin1());
}
int qemu::CreateDiskControl(QString controlName)
{
return 0;
}
int qemu::MountDisk(QString diskPath, QString controlName, int port, int device)
{
commandOption += "-drive 'file=" + diskPath + ",if=ide,index=" + QString::number(device) + "' ";
return 0;
}
int qemu::MountISO(QString isoPath, QString controlName, int port, int device)
{
commandOption += "-drive 'media=cdrom,file=" + isoPath + ",if=ide,index=" + QString::number(device) + "' ";
return 0;
}
int qemu::BootFirst(QString bootDrive)
{
commandOption += "-boot '" + bootDrive + "' ";
return 0;
}
int qemu::SetNetBridge(QString netDriver)
{
return 0;
}
int qemu::SetCPU(int number, int cpuNum, int coreNum)
{
// commandOption += "-smp " + QString::number(number) + " ";
// 调整调用方法
//qDebug() << number << " " << cpuNum << " " << coreNum;
qDebug() << "Socket: " << cpuNum;
qDebug() << "Core: " << coreNum;
qDebug() << "Threads: " << number;
commandOption += "-smp " + QString::number(number) + ",sockets=" + QString::number(cpuNum) + ",cores=" + QString::number(coreNum / cpuNum) + ",threads=" + QString::number(number / cpuNum / coreNum) + " ";
return 0;
}
int qemu::SetMemory(int memory)
{
commandOption += "-m " + QString::number(memory) + "M ";
return 0;
}
int qemu::SetRemote(bool setting)
{
return 0;
}
int qemu::SetRemoteConnectSetting(int port)
{
return 0;
}
int qemu::MountMainDisk(QString diskPath)
{
commandOption += " --hda '" + diskPath + "' ";
return 0;
}
int qemu::StartArmhf()
{
qDebug() << commandOption;
QString qemuPath = "qemu-system-arm";
if(QFile::exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh")) {
// 如果存在拓展 Qemu则调用此
qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-arm";
}
if(Command().GetCommand("arch").replace("\n", "").replace(" ", "") == "aarch64" && !system((QCoreApplication::applicationDirPath() + "/kvm-ok").toUtf8())){
return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
}
return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk -cpu max -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
}
int qemu::StartAarch64()
{
QString bootScreenLogo = "";
QString qemuPath = "qemu-system-aarch64";
// 判断 boot 文件是否存在
if(QFile::exists(QCoreApplication::applicationDirPath() + "/boot.jpg")) {
bootScreenLogo = QCoreApplication::applicationDirPath() + "/boot.jpg";
}
else {
// 写入 logo
QFile::copy(":/boot.jpg", "/tmp/deep-wine-runner-boot.jpg");
bootScreenLogo = "/tmp/deep-wine-runner-boot.jpg";
}
if(QFile::exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh")) {
// 如果存在拓展 Qemu则调用此
qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-aarch64";
}
qDebug() << commandOption;
if(Command().GetCommand("arch").replace("\n", "").replace(" ", "") == "aarch64" && !system((QCoreApplication::applicationDirPath() + "/kvm-ok").toUtf8())){
return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
}
return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk -cpu max -M virt " + commandOption + " -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
}
int qemu::StartLoong64()
{
return 1;
}
int qemu::Start(bool unShown)
{
QString newCommandOption = commandOption;
QString qemuPath = "qemu-system-x86_64";
qDebug() << GetBootLogoPath();
if(isUEFI) {
newCommandOption += " -vga none -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 ";
}
else {
newCommandOption += " -vga virtio -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 ";
}
// UOS 3a4000 使用程序自带的 qemu
QString info = SystemInfo().toLower();
if(info.contains("uos") || info.contains("unio")) {
// 判断架构
QString arch = GetArch();
if(arch == "mips64" || arch == "mipsel64") {
qemuPath = "bwrap --dev-bind / / --bind '" + QCoreApplication::applicationDirPath() + "/MipsQemu/usr/lib/mips64el-linux-gnuabi64/qemu/ui-gtk.so' /usr/lib/mips64el-linux-gnuabi64/qemu/ui-gtk.so '" + QCoreApplication::applicationDirPath() + "/MipsQemu/usr/bin/qemu-system-x86_64' ";
}
}
if(QFile::exists("/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh")) {
// 如果存在拓展 Qemu则调用此
qemuPath = "/opt/apps/deepin-wine-runner-qemu-system-extra/files/run.sh qemu-system-x86_64";
}
qDebug() << commandOption;
if(Command().GetCommand("arch").replace("\n", "").replace(" ", "") == "x86_64" && !system((QCoreApplication::applicationDirPath() + "/kvm-ok").toUtf8())){
return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk --enable-kvm -cpu host " + newCommandOption + " > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
}
return system((qemuPath + " --boot 'splash=" + GetBootLogoPath() + ",order=d,menu=on,splash-time=2000' -display vnc=:5 -display gtk -nic model=rtl8139 " + newCommandOption + " > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1 &").toLatin1());
}
int qemu::Stop()
{
system("killall qemu-system-x86_64 -9");
system("killall qemu-system-aarch64 -9");
system("killall qemu-system-arm -9");
system("killall kvm -9");
return 0;
}
int qemu::Delete()
{
return system(("rm -rfv '" + name + "'").toLatin1());
}
int qemu::SetDisplayMemory(int memory)
{
return 0;
}
int qemu::InstallGuessAdditions(QString controlName, int port, int device)
{
return 0;
}
int qemu::EnabledAudio()
{
commandOption += "-device AC97 -device ES1370 -device intel-hda -device hda-duplex ";
return 0;
}
int qemu::EnabledClipboardMode()
{
return 0;
}
int qemu::EnabledDraganddrop()
{
return 0;
}
int qemu::ShareFile(QString name, QString path)
{
return 0;
}
int qemu::SetVBoxSVGA()
{
return 0;
}
int qemu::SetMousePS2()
{
return 0;
}
int qemu::SetKeyboardPS2()
{
return 0;
}
int qemu::OpenUSB()
{
return 0;
}
int qemu::UseAarch64EFI()
{
if(QFile::exists("/usr/share/qemu-efi-aarch64/QEMU_EFI.fd")){
commandOption += "--bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ";
return 0;
}
if(QFile::exists(QCoreApplication::applicationDirPath() + "/QEMU_AARCH64_EFI.fd")){
commandOption += "--bios '" + QCoreApplication::applicationDirPath() + "/QEMU_AARCH64_EFI.fd' ";
return 0;
}
return 1;
}
int qemu::UseArmhfEFI()
{
if(QFile::exists("/usr/share/AAVMF/AAVMF32_CODE.fd")){
commandOption += "--bios /usr/share/AAVMF/AAVMF32_CODE.fd ";
return 0;
}
if(QFile::exists(QCoreApplication::applicationDirPath() + "/AAVMF32_CODE.fd")){
commandOption += "--bios '" + QCoreApplication::applicationDirPath() + "/AAVMF32_CODE.fd' ";
return 0;
}
return 1;
}
int qemu::UseLoongarch64EFI()
{
}
int qemu::UseOtherEFI(QString fdFilePath)
{
}
int qemu::EnabledUEFI(bool status)
{
isUEFI = status;
if(!status){
return 0;
}
if(QFile::exists("/usr/share/qemu/OVMF.fd")){
commandOption += "--bios /usr/share/qemu/OVMF.fd ";
return 0;
}
if(QFile::exists(QCoreApplication::applicationDirPath() + "/OVMF.fd")){
commandOption += "--bios '" + QCoreApplication::applicationDirPath() + "/OVMF.fd' ";
return 0;
}
return 1;
}
int qemu::MountMainISO(QString isoPath)
{
commandOption += "--cdrom '" + isoPath + "' ";
return 0;
}
int qemu::AutoInstall(QString iso)
{
return 0;
}
int qemu::AddDiskSpace(QString path, double data)
{
return system(("qemu-img resize '" + path + "' +" + QString::number(data) + "G").toUtf8());
}
QString qemu::GetBootLogoPath()
{
QString bootScreenLogo = "";
// 判断 boot 文件是否存在
if(QFile::exists(QCoreApplication::applicationDirPath() + "/boot.jpg")) {
bootScreenLogo = QCoreApplication::applicationDirPath() + "/boot.jpg";
}
else {
// 写入 logo
if(QFile::exists("/tmp/deep-wine-runner-boot.jpg")) {
QFile::remove("/tmp/deep-wine-runner-boot.jpg");
}
QFile::copy(":/boot.jpg", "/tmp/deep-wine-runner-boot.jpg");
bootScreenLogo = "/tmp/deep-wine-runner-boot.jpg";
}
return bootScreenLogo;
}
QString qemu::SystemInfo()
{
QFile file("/etc/os-version");
file.open(QFile::ReadOnly);
QString data = file.readAll();
file.close();
return data;
}
QString qemu::GetArch()
{
QProcess process;
process.start("uname", QStringList() << "-m");
process.waitForStarted();
process.waitForFinished();
QString data = process.readAllStandardOutput();
process.close();
return data.replace("\n", "").replace(" ", "");
}

View File

@@ -1,62 +0,0 @@
/*
* gfdgd xi
* 依照 GPLV3 开源
*/
#ifndef QEMU_H
#define QEMU_H
#include <QString>
class qemu
{
public:
// 虚拟机信息
QString name;
QString managerPath;
QString vboxVersion;
qemu(QString name, QString managerPath="/usr/bin");
int Create(QString type="Windows7");
int CreateDisk(QString path, int size);
int CreateDiskControl(QString controlName="storage_controller_1");
int MountDisk(QString diskPath, QString controlName="storage_controller_1", int port=0, int device=0);
int MountISO(QString isoPath, QString controlName="storage_controller_1", int port=1, int device=0);
int BootFirst(QString bootDrive);
int SetNetBridge(QString netDriver);
int SetCPU(int number, int cpuNum, int coreNum);
int SetMemory(int memory);
int SetRemote(bool setting);
int SetRemoteConnectSetting(int port=5540);
int Start(bool unShown=false);
int StartArmhf();
int StartAarch64();
int StartLoong64();
int MountMainDisk(QString diskPath);
int Stop();
int Delete();
int SetDisplayMemory(int memory);
int InstallGuessAdditions(QString controlName="storage_controller_1", int port=1, int device=0);
int EnabledAudio();
int EnabledClipboardMode();
int EnabledDraganddrop();
int ShareFile(QString name, QString path);
int SetVBoxSVGA();
int SetMousePS2();
int SetKeyboardPS2();
int OpenUSB();
int EnabledUEFI(bool status);
int AutoInstall(QString iso);
int MountMainISO(QString isoPath);
int UseAarch64EFI();
int UseArmhfEFI();
int UseLoongarch64EFI();
int UseOtherEFI(QString fdFilePath);
int AddDiskSpace(QString path, double data);
private:
QString commandOption = "";
bool isUEFI = false;
QString GetBootLogoPath();
QString SystemInfo();
QString GetArch();
};
#endif // QEMU_H

View File

@@ -1,130 +0,0 @@
#include "qemusetting.h"
#include "ui_qemusetting.h"
#include <QMessageBox>
#include <QDesktopServices>
#include <QUrl>
#include <QJsonObject>
#include <QJsonDocument>
#include <QFile>
#include "infoutils.h"
#include <QDir>
#include <sys/sysinfo.h>
#include <QDebug>
QemuSetting::QemuSetting(QWidget *parent) :
QWidget(parent),
ui(new Ui::QemuSetting)
{
ui->setupUi(this);
// 判断是否安装了 Wine 运行器
ui->getrunner->setHidden(QFile::exists(QCoreApplication::applicationDirPath() + "/../mainwindow.py"));
// 设置变量
if(QFile::exists(QDir::homePath() + "/.config/deepin-wine-runner/QemuSetting.json")){
// 读取配置文件
QFile file(QDir::homePath() + "/.config/deepin-wine-runner/QemuSetting.json");
file.open(QIODevice::ReadOnly);
QJsonParseError error;
QJsonDocument document = QJsonDocument::fromJson(file.readAll(), &error);
file.close();
if(error.error != QJsonParseError::NoError){
QMessageBox::critical(this, "错误", error.errorString());
}
else {
QJsonObject object = document.object();
qDebug() << QJsonDocument(object).toJson();
ui->enableKvm->setChecked(object.value("EnableKVM").toBool());
ui->enableRdp->setChecked(object.value("EnableRDP").toBool());
ui->enableVnc->setChecked(object.value("EnableVNC").toBool());
ui->enableSound->setChecked(object.value("EnableSound").toBool());
ui->memoryNumber->setValue(object.value("Memory").toInt());
ui->vncNumber->setValue(object.value("VNC").toInt());
ui->cpuNumber->setValue(object.value("CPU").toInt());
}
}
else {
// 默认
this->SetDefaultValue();
}
}
void QemuSetting::SetDefaultValue(){
long memory = 0;
long memoryAll = 0;
long swap = 0;
long swapAll = 0;
infoUtils::memoryRate(memory, memoryAll, swap, swapAll);
ui->memoryNumber->setValue(memoryAll / 3 / 1024);
ui->vncNumber->setValue(5);
ui->cpuNumber->setValue(get_nprocs());
ui->enableKvm->setChecked(true);
ui->enableRdp->setChecked(true);
ui->enableVnc->setChecked(true);
ui->enableSound->setChecked(true);
}
QemuSetting::~QemuSetting()
{
delete ui;
}
void QemuSetting::on_buttonBox_accepted()
{
QMessageBox::information(NULL, "", "");
acceptDrops();
}
void QemuSetting::on_save_clicked()
{
QJsonParseError error;
QJsonDocument document = QJsonDocument::fromJson("{}", &error);
if(error.error != QJsonParseError::NoError){
QMessageBox::critical(this, "错误", error.errorString());
return;
}
QJsonObject object = document.object();
//object.insert("1", QJsonValue("aa"));
object.insert("EnableKVM", ui->enableKvm->isChecked());
object.insert("EnableRDP", ui->enableRdp->isChecked());
object.insert("EnableVNC", ui->enableVnc->isChecked());
object.insert("EnableSound", ui->enableSound->isChecked());
object.insert("Memory", ui->memoryNumber->value());
object.insert("VNC", ui->vncNumber->value());
object.insert("CPU", ui->cpuNumber->value());
qDebug() << QJsonDocument(object).toJson();
// 读取配置文件
QDir dir(QDir::homePath() + "/.config/deepin-wine-runner/");
if(!dir.exists()){
dir.mkpath(QDir::homePath() + "/.config/deepin-wine-runner/");
}
QFile file(QDir::homePath() + "/.config/deepin-wine-runner/QemuSetting.json");
file.open(QIODevice::WriteOnly);
file.write(QJsonDocument(object).toJson());
file.close();
QMessageBox::information(this, "提示", "保存完成!");
}
void QemuSetting::on_cancel_clicked()
{
delete this;
}
void QemuSetting::on_getrunner_clicked()
{
QDesktopServices::openUrl(QUrl("https://gitee.com/gfdgd-xi/deep-wine-runner/"));
}
void QemuSetting::on_enableVnc_stateChanged(int arg1)
{
// 控件的开启/关闭
ui->vncNumber->setEnabled(ui->enableVnc->isChecked());
}
void QemuSetting::on_setDefault_clicked()
{
if(QMessageBox::question(this, "提示", "你确定要重置为默认?重置后将无法恢复") == QMessageBox::No){
return;
}
QFile::remove(QDir::homePath() + "/.config/deepin-wine-runner/QemuSetting.json");
this->SetDefaultValue();
QMessageBox::information(this, "提示", "设置完成!");
}

View File

@@ -1,39 +0,0 @@
#ifndef QEMUSETTING_H
#define QEMUSETTING_H
#include <QWidget>
#include <QCheckBox>
#include <QSpinBox>
namespace Ui {
class QemuSetting;
}
class QemuSetting : public QWidget
{
Q_OBJECT
public:
explicit QemuSetting(QWidget *parent = nullptr);
~QemuSetting();
private slots:
void on_buttonBox_accepted();
void on_save_clicked();
void on_cancel_clicked();
void on_getrunner_clicked();
void on_enableVnc_stateChanged(int arg1);
void on_setDefault_clicked();
private:
void SetDefaultValue();
Ui::QemuSetting *ui;
};
#endif // QEMUSETTING_H

View File

@@ -1,210 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QemuSetting</class>
<widget class="QWidget" name="QemuSetting">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>496</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>设置</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="9" column="1">
<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 row="4" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>&lt;h3&gt;远程服务&lt;/h3&gt;</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>VNC服务端口</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QCheckBox" name="enableRdp">
<property name="text">
<string>开启 rdp 服务映射</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>内存大小MB</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="memoryNumber">
<property name="maximum">
<number>999999999</number>
</property>
</widget>
</item>
<item row="8" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="vncNumber">
<property name="maximum">
<number>9999</number>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>&lt;h3&gt;基础设置&lt;/h3&gt;</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="enableVnc">
<property name="text">
<string>开启VNC服务</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="enableKvm">
<property name="text">
<string>开启 kvm 加速</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>CPU核心数</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="cpuNumber">
<property name="maximum">
<number>999999999</number>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="enableSound">
<property name="text">
<string>开启声音</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<item>
<widget class="QPushButton" name="save">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>保存</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cancel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>取消</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="setDefault">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>重置
默认</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="getrunner">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>获取
Wine
运行器</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

Binary file not shown.

View File

@@ -1,22 +0,0 @@
#include <iostream>
#include <filesystem>
using namespace std;
// 清屏
void CleanScreen(){
/*if(filesystem::exists("/")){
return;
}*/
system("clear");
}
int main(int argc, char* argv[]){
// 判断参数是否齐全
CleanScreen();
//
if(argc < 3) {
cout << "参数不齐!" << endl;
return 1;
}
cout << argc << endl;
return 0;
}

View File

@@ -1,50 +0,0 @@
#!/usr/bin/env python3
import os
import api
import sys
import psutil
if __name__ == "__main__":
os.system("clear")
programPath = os.path.split(os.path.realpath(__file__))[0]
if len(sys.argv) < 3 :
print("参数不齐!")
exit()
net = ""
for k, v in psutil.net_if_addrs().items():
for item in v:
if item[0] == 2 and not item[1] == "127.0.0.1" and not item[1] == "192.168.250.1":
net = k
break
if net == "":
exit()
# 创建一个叫Windows的虚拟机
vm = api.Manager("Windows")
if sys.argv[2] == "0":
vm.Create("Windows7")
elif sys.argv[2] == "1":
vm.Create("Windows7_64")
else:
vm.Create("WindowsNT_64")
vm.CreateDisk(f"{api.homePath}/VirtualBox VMs/Windows/Windows.vdi", 131072)
vm.CreateDiskControl()
vm.MountDisk(f"{api.homePath}/VirtualBox VMs/Windows/Windows.vdi")
vm.MountISO(sys.argv[1])
if sys.argv[2] == "0":
vm.MountISO(f"{programPath}/Windows7X86Auto.iso", device=1)
elif sys.argv[2] == "1":
vm.MountISO(f"{programPath}/Windows7X64Auto.iso", device=1)
vm.SetCPU(1)
vm.SetMemory(psutil.virtual_memory().total // 1024 // 1024 // 3)
vm.SetDisplayMemory(32)
vm.SetNetBridge(net)
vm.EnabledAudio()
vm.EnabledClipboardMode()
vm.EnabledDraganddrop()
vm.SetVBoxSVGA()
vm.SetMousePS2()
vm.SetKeyboardPS2()
vm.OpenUSB()
vm.ShareFile("ROOT", "/")
vm.ShareFile("HOME", api.homePath)
vm.Start()

Binary file not shown.

Binary file not shown.

View File

@@ -1,8 +0,0 @@
<RCC>
<qresource prefix="/">
<file>zh_CN.qm</file>
<file>zh_CN.ts</file>
<file>en_US.qm</file>
<file>en_US.ts</file>
</qresource>
</RCC>

View File

@@ -1,113 +0,0 @@
/*
* gfdgd xi
*/
#include "vbox.h"
#include "command.h"
#include <QMessageBox>
vbox::vbox(QString name, QString managerPath) {
this->name = name;
this->managerPath = managerPath;
//Command command = Command();
this->vboxVersion = Command().GetCommand("'" + managerPath + "' -v");
}
int vbox::Create(QString type){
system(("\"" + managerPath + "\" createvm --name \""
+ name + "\" --ostype \"" + type +
"\" --register").toLatin1());
return system(("\"" + managerPath + "\" modifyvm \""
+ name + "\" --ostype \"" + type +
"\" ").toLatin1());
//vboxmanage modifyvm testvm --ostype
}
int vbox::CreateDisk(QString path, int size){
return system(("\"" + managerPath + "\" createvdi --filename \"" + path + "\" --size \"" + QString::number(size) + "\"").toLatin1());
}
int vbox::CreateDiskControl(QString controlName){
return system(("\"" + managerPath + "\" storagectl \"" + name + "\" --name \"" + controlName + "\" --add ide").toLatin1());
}
int vbox::MountDisk(QString diskPath, QString controlName, int port, int device){
return system(("\"" + managerPath + "\" storageattach \"" + name +
"\" --storagectl \"" + controlName + "\" --type hdd --port "
+ QString::number(port) + " --device " + QString::number(device) + " --medium \"" + diskPath + "\"").toLatin1());
}
int vbox::MountISO(QString isoPath, QString controlName, int port, int device){
return system(("\"" + managerPath + "\" storageattach \"" + name + "\" --storagectl \"" +
controlName + "\" --type dvddrive --port " + QString::number(port) + " --device " + QString::number(device)
+ " --medium \"" + isoPath + "\"").toLatin1());
}
int vbox::BootFirst(QString bootDrive){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --boot1 " + bootDrive).toLatin1());
}
int vbox::SetNetBridge(QString netDriver){
return system(("\"" + managerPath + "\" modifyvm \"" + name +
"\" --nic1 bridged --cableconnected1 on --nictype1 82540EM --bridgeadapter1 \"" + netDriver + "\" --intnet1 brigh1 --macaddress1 auto").toLatin1());
}
int vbox::SetCPU(int number, int cpuNum, int coreNum){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --cpus " + QString::number(number)).toLatin1());
}
int vbox::SetMemory(int memory){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --memory " + QString::number(memory)).toLatin1());
}
int vbox::SetRemote(bool setting){
if(setting){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --vrde on").toLatin1());
}
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --vrde off").toLatin1());
}
int vbox::SetRemoteConnectSetting(int port){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --vrdeport " + QString::number(port) + " --vrdeaddress """).toLatin1());
}
int vbox::Start(bool unShown){
if(unShown){
return system(("\"" + managerPath + "\" > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1").toLatin1());
}
return system(("\"" + managerPath + "\" startvm \"" + name + "\" > /tmp/windows-virtual-machine-installer-for-wine-runner-install.log 2>&1").toLatin1());
}
int vbox::Stop(){
return system(("\"" + managerPath + "\" controlvm \"" + name + "\" poweroff").toLatin1());
}
int vbox::Delete(){
return system(("\"" + managerPath + "\" unregistervm --delete \"" + name + "\"").toLatin1());
}
int vbox::SetDisplayMemory(int memory){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --vram " + QString::number(memory)).toLatin1());
}
int vbox::InstallGuessAdditions(QString controlName, int port, int device){
return MountISO("/usr/share/virtualbox/VBoxGuestAdditions.iso", controlName, port, device);
}
int vbox::EnabledAudio(){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --audio-driver pulse --audiocontroller hda --audioin on --audioout on").toLatin1());
}
int vbox::EnabledClipboardMode(){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --clipboard-mode bidirectional").toLatin1());
}
int vbox::EnabledDraganddrop(){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --draganddrop bidirectional").toLatin1());
}
int vbox::ShareFile(QString name, QString path){
return system(("\"" + managerPath + "\" sharedfolder add \"" + this->name + "\" -name \"" + name + "\" -hostpath \"" + path + "\"").toLatin1());
}
int vbox::SetVBoxSVGA(){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --graphicscontroller vboxsvga").toLatin1());
}
int vbox::SetMousePS2(){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --mouse usb").toLatin1());
}
int vbox::SetKeyboardPS2(){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --keyboard usb").toLatin1());
}
int vbox::OpenUSB(){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --usbohci on").toLatin1());
}
int vbox::EnabledUEFI(bool status){
if(status){
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --firmware=efi").toLatin1());
}
return system(("\"" + managerPath + "\" modifyvm \"" + name + "\" --firmware=bios").toLatin1());
}
int vbox::AutoInstall(QString iso){
return system(("vboxmanage unattended install '" + name + "' '--iso=" + iso + "'").toLatin1());
}

View File

@@ -1,47 +0,0 @@
/*
* gfdgd xi
* 依照 GPLV3 开源
*/
#ifndef VBOX_H
#define VBOX_H
#include <QString>
class vbox
{
public:
// 虚拟机信息
QString name;
QString managerPath;
QString vboxVersion;
vbox(QString name, QString managerPath="VBoxManage");
int Create(QString type="Windows7");
int CreateDisk(QString path, int size);
int CreateDiskControl(QString controlName="storage_controller_1");
int MountDisk(QString diskPath, QString controlName="storage_controller_1", int port=0, int device=0);
int MountISO(QString isoPath, QString controlName="storage_controller_1", int port=1, int device=0);
int BootFirst(QString bootDrive);
int SetNetBridge(QString netDriver);
int SetCPU(int number, int cpuNum, int coreNum);
int SetMemory(int memory);
int SetRemote(bool setting);
int SetRemoteConnectSetting(int port=5540);
int Start(bool unShown=false);
int Stop();
int Delete();
int SetDisplayMemory(int memory);
int InstallGuessAdditions(QString controlName="storage_controller_1", int port=1, int device=0);
int EnabledAudio();
int EnabledClipboardMode();
int EnabledDraganddrop();
int ShareFile(QString name, QString path);
int SetVBoxSVGA();
int SetMousePS2();
int SetKeyboardPS2();
int OpenUSB();
int EnabledUEFI(bool status);
int AutoInstall(QString iso);
private:
};
#endif // VBOX_H

View File

@@ -1,144 +0,0 @@
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh edit win7
or other application using the libvirt API.
-->
<domain type='kvm'>
<name>win7</name>
<uuid>721bf798-852e-4e2c-bfa7-c151037433b7</uuid>
<metadata>
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
<libosinfo:os id="http://microsoft.com/win/7"/>
</libosinfo:libosinfo>
</metadata>
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='pc-q35-5.2'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<hyperv mode='custom'>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
</hyperv>
<vmport state='off'/>
</features>
<cpu mode='host-model' check='partial'/>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
<timer name='hypervclock' present='yes'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/win7'/>
<target dev='sda' bus='sata'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/media/gfdgd_xi/ventoy/XiaYuHao/System-ISO/Windows-ISO/Windows-7/Windows-7-SP1-x86.iso'/>
<target dev='sdb' bus='sata'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/home/gfdgd_xi/Desktop/deep-wine-runner/VM/Windows7X86自动应答.iso'/>
<target dev='sdc' bus='sata'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='2'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x2'/>
</controller>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pcie-root'/>
<controller type='pci' index='1' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='1' port='0x10'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
</controller>
<controller type='pci' index='2' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='2' port='0x11'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
</controller>
<controller type='pci' index='3' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='3' port='0x12'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
</controller>
<interface type='direct'>
<mac address='52:54:00:a3:d2:72'/>
<source dev='enp37s0' mode='bridge'/>
<model type='e1000e'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<input type='tablet' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='spice' autoport='yes'>
<listen type='address'/>
<image compression='off'/>
</graphics>
<sound model='ich9'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/>
</sound>
<audio id='1' type='spice'/>
<video>
<model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</video>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='2'/>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='3'/>
</redirdev>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
</memballoon>
</devices>
</domain>

View File

@@ -1 +0,0 @@
<<3C>d<18><EFBFBD>!<1C>`<60><><EFBFBD>

View File

@@ -1,597 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>MainWindow</name>
<message>
<location filename="mainwindow.ui" line="14"/>
<source>Wine </source>
<oldsource>Windows </oldsource>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="32"/>
<location filename="mainwindow.ui" line="35"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="43"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="50"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="57"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="68"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="89"/>
<source> Windows Windows 7 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="94"/>
<source> Windows UEFI Windows 8 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="99"/>
<source> WIndows 11</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="104"/>
<source> Windows XP VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="109"/>
<source> Windows VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="114"/>
<source> WindowsUEFI VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="119"/>
<source> arm32 Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="124"/>
<source> arm64 Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="136"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="143"/>
<location filename="mainwindow.ui" line="153"/>
<source>qemu/kvm</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="158"/>
<source>VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="183"/>
<source> Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="190"/>
<source>kvm </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="197"/>
<source>Qemu虚拟机设置</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="204"/>
<source>/Qemu磁盘</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="211"/>
<source>Qemu磁盘</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="218"/>
<source>Qemu磁盘</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="225"/>
<source>VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="241"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans CJK SC&apos;; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;UOS 3a4000 使 Qemu /&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://gfdgdxi.lanzoue.com/b01rk9wza&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gfdgdxi.lanzoue.com/b01rk9wza&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; 密码:6wvf&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58662214-c46520?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Qemu / kvm Qemu&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;使 ISO &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;123 &lt;/span&gt;&lt;a href=&quot;https://www.123pan.com/s/pDSKVv-oypWv&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://www.123pan.com/s/pDSKVv-oypWv&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.xunlei.com/s/VNKMz3wgbYHg6JIh50ZKIc7pA1?pwd=35e5&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码35e5&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.baidu.com/s/19WbvinITCQJFZpAdZutrjg?pwd=me4y&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 提取码: me4y&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58662220-3590cf?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso|2653276160|7503E4B9B8738DFCB95872445C72AEFB|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt; Windows &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: &lt;/span&gt;&lt;a href=&quot;https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://pan.baidu.com/s/1D1NSy7k7XBnOZL_tNTnG6g?pwd=7s2p&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; 提取码: 7s2p &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;http://ctfile.gfdgdxi.top/d/31540479-58659214-0732a8?p=2061&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt; (访问密码: 2061)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;123&lt;/span&gt;&lt;a href=&quot;https://www.123pan.com/s/pDSKVv-uCBWv.html&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://www.123pan.com/s/pDSKVv-uCBWv.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="283"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans CJK SC&apos;; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt;使 VirtualBox&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt; X86 PC使 qemu kvm使 Windows XP Windows 7&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600; text-decoration: underline;&quot;&gt;/https://gitee.com/gfdgd-xi/deep-wine-runner/wikis 或 https://gitee.com/gfdgd-xi/wine-runner-wiki&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Ctrl&lt;span style=&quot; font-weight:600; font-style:italic; text-decoration: underline;&quot;&gt;qemu则是 Ctrl+Alt+G&lt;/span&gt; &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;VirtualBox &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Qemu Virtio &lt;a href=&quot;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:26pt; font-weight:600;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712191756.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;使&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712192850.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712193527.png&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Windows 7 Windows 7 Windows XPWindows 10DeepinUbuntu &lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;1 Oracle VM VirtualBox &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;2Windows&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Manager_20220712223602.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;3&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox_20220712223705.png&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;使 VirtualBox&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;1&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;3&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;4&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//__20220712224639.png&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:26pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;1=&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture/_VirtualBox Machine_20220712142929.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2VirtualBox Guest AdditionsVBoxWindowsAdditions&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143006.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;3&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143018.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;4Next&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143029.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143037.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;5Install&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143044.png&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;6Reboot nowFinishReboot nowFinish&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/picture//_VirtualBox Machine_20220712143103.png&quot; /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="421"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans CJK SC&apos;; font-size:10.5pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; wine Wine Is Not An Emulator&amp;lt;Wine &amp;gt; Windows &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; C++ QtPython Virtualbox Windows Linux Windows exe &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; GPL V3 &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Gitee&lt;a href=&quot;https://gitee.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://gitee.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Github&lt;a href=&quot;https://github.com/gfdgd-xi/deep-wine-runner&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0082fa;&quot;&gt;https://github.com/gfdgd-xi/deep-wine-runner&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; Wine Wine Windows Windows exe &lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;gfdgd xi&lt;/p&gt;
&lt;hr /&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="463"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="487"/>
<source>/</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="492"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="497"/>
<location filename="mainwindow.cpp" line="442"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="502"/>
<location filename="mainwindow.cpp" line="408"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="507"/>
<source>X86Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="512"/>
<source> VirtualBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="517"/>
<source> Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="75"/>
<location filename="mainwindow.ui" line="79"/>
<source>Windows 7 32 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="84"/>
<source>Windows 7 64 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="232"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="274"/>
<source>/使</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="364"/>
<location filename="mainwindow.ui" line="482"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.ui" line="477"/>
<source>退</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="88"/>
<source>Wine </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;/p&gt;&lt;p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="90"/>
<source>&lt;/p&gt;&lt;p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="92"/>
<source>&lt;hr/&gt;&lt;h1&gt;&lt;/h1&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="179"/>
<location filename="mainwindow.cpp" line="186"/>
<location filename="mainwindow.cpp" line="193"/>
<location filename="mainwindow.cpp" line="200"/>
<location filename="mainwindow.cpp" line="215"/>
<location filename="mainwindow.cpp" line="222"/>
<location filename="mainwindow.cpp" line="229"/>
<location filename="mainwindow.cpp" line="248"/>
<location filename="mainwindow.cpp" line="254"/>
<location filename="mainwindow.cpp" line="263"/>
<location filename="mainwindow.cpp" line="307"/>
<location filename="mainwindow.cpp" line="322"/>
<location filename="mainwindow.cpp" line="328"/>
<location filename="mainwindow.cpp" line="332"/>
<location filename="mainwindow.cpp" line="338"/>
<location filename="mainwindow.cpp" line="357"/>
<location filename="mainwindow.cpp" line="360"/>
<location filename="mainwindow.cpp" line="364"/>
<location filename="mainwindow.cpp" line="367"/>
<location filename="mainwindow.cpp" line="392"/>
<location filename="mainwindow.cpp" line="404"/>
<location filename="mainwindow.cpp" line="438"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="179"/>
<source> Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="186"/>
<source> VBox</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="193"/>
<source> qemu-system-arm</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="200"/>
<source> qemu-system-aarch64</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="215"/>
<source> Windows7X86Auto.iso
Wine </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="222"/>
<source> Windows7X64Auto.iso
Wine </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="229"/>
<source> UEFI
Qemu Qemu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="248"/>
<source>Qemu </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="254"/>
<location filename="mainwindow.cpp" line="263"/>
<source>VirtualBox </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="278"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="307"/>
<source>
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="311"/>
<source> Qemu </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="311"/>
<source>Qemu镜像(*.qcow2 *.img *.raw *.qcow *.qed *.vdi *.vhdx *.vmdk);;(*.*)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="322"/>
<location filename="mainwindow.cpp" line="328"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="332"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="338"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="357"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="360"/>
<source>
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="364"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="367"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="373"/>
<location filename="mainwindow.cpp" line="389"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="373"/>
<source> kvm-ok
使 sudo apt install cpu-checker </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="383"/>
<source>使</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="389"/>
<source>使 kvm
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="392"/>
<source>使 kvm
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="404"/>
<location filename="mainwindow.cpp" line="438"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="408"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="mainwindow.cpp" line="442"/>
<source></source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QemuSetting</name>
<message>
<location filename="qemusetting.ui" line="14"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="35"/>
<source>&lt;h3&gt;&lt;/h3&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="42"/>
<source>VNC服务端口</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="49"/>
<source> rdp </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="56"/>
<source>MB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="90"/>
<source>&lt;h3&gt;&lt;/h3&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="97"/>
<source>VNC服务</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="104"/>
<source> kvm </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="111"/>
<source>CPU核心数</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="125"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="145"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="158"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="171"/>
<source>
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="qemusetting.ui" line="185"/>
<source>
Wine
</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Some files were not shown because too many files have changed in this diff Show More