1.9.0大体完成

This commit is contained in:
gfdgd xi 2022-08-11 21:54:20 +08:00
parent df344a398c
commit d8f482533c
87 changed files with 41771 additions and 784 deletions

@ -22,11 +22,12 @@ def AddSparkStoreSource():
os.system("sudo apt update -o Dir::Etc::sourcelist=\"sources.list.d/sparkstore.list\" -o Dir::Etc::sourceparts=\"-\" -o APT::Get::List-Cleanup=\"0\"")
def InstallSparkWine(wine):
if os.path.exists("/usr/local/bin/ss-apt-fast"):
os.system("sudo apt install apt-fast -y")
os.system(f"sudo ss-apt-fast install \"{wine}\" -y")
return
os.system(f"sudo apt install \"{wine}\" -y")
#if os.path.exists("/usr/local/bin/ss-apt-fast"):
#os.system("sudo apt install apt-fast -y")
#os.system(f"sudo ss-apt-fast install \"{wine}\" -y")
#return
os.system("sudo ss-apt-fast update")
os.system(f"sudo ss-apt-fast install \"{wine}\" -y")
###################
# 程序功能
@ -47,12 +48,8 @@ print("请问是否要安装 deepin-wine[Y/N]", end=' ')
choose = input().upper()
if not choose == "N":
os.system("sudo apt install deepin-wine -y")
print("请问是否要安装 deepin-wine5需要添加星火应用商店的源[Y/N]", end=' ')
print("请问是否要安装 deepin-wine5需要安装最新版星火应用商店[Y/N]", end=' ')
choose = input().upper()
if not choose == "N":
if not os.path.exists("/etc/apt/sources.list.d/sparkstore.list"):
AddSparkStoreSource()
InstallSparkWine("deepin-wine5")
print("请问是否要安装 deepin-wine5-stable[Y/N]", end=' ')
choose = input().upper()
if not choose == "N":
@ -61,11 +58,9 @@ print("请问是否要安装 deepin-wine6-stable[Y/N]", end=' ')
choose = input().upper()
if not choose == "N":
os.system("sudo apt install deepin-wine6-stable -y")
print("请问是否要安装 spark-wine7-devel需要添加星火应用商店的源[Y/N]", end=' ')
print("请问是否要安装 spark-wine7-devel需要安装最新版星火应用商店[Y/N]", end=' ')
choose = input().upper()
if not choose == "N":
if not os.path.exists("/etc/apt/sources.list.d/sparkstore.list"):
AddSparkStoreSource()
InstallSparkWine("spark-wine7-devel")
print("请问是否要安装 ukylin-wine需要添加 ukylin 源,但因为可能会导致系统问题,将不会自动添加)?[Y/N]", end=" ")
choose = input().upper()

67
InstallNewWineHQ.sh Executable file

@ -0,0 +1,67 @@
#!/bin/bash
ubuntuSource=(
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/impish/winehq-impish.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/focal/winehq-focal.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/bionic/winehq-bionic.sources"
)
debianSource=(
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/buster/winehq-buster.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bullseye/winehq-bullseye.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bookworm/winehq-bookworm.sources"
)
# 选择发行版
toilet WineHQ
echo "WineHQ 官网https://wiki.winehq.org/"
echo
echo "选择发行版:"
echo "0. Debian"
echo "1. Ubuntu"
read system
# 选择版本
echo "选择系统版本"
if [ $system = "0" ]; then
echo "0. Debian 10 (Buster)"
echo "1. Debian 11 (Bullseye)"
echo "2. Debian Testing (Bookworm)"
fi
if [ $system = "1" ]; then
echo "0. Ubuntu 22.04"
echo "1. Ubuntu 21.10"
echo "2. Ubuntu 20.04Linux Mint 20.x"
echo "3. Ubuntu 18.04Linux Mint 19.x"
fi
read systemVersion
# 选择 Wine
echo "选择 Wine"
echo "0. 稳定分支"
echo "1. 开发分支"
echo "2. Staging 分支"
read programVersion
# 初步配置
sudo apt-key del "D43F 6401 4536 9C51 D786 DDEA 76F1 A20F F987 672F"
sudo dpkg --add-architecture i386
sudo wget -nc -O /usr/share/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
# 检测 apt-fast 或 ss-apt-fast 是否存在
apt="apt"
which apt-fast > /dev/null
if [ $? == 0 ]; then
apt="apt-fast"
fi
which ss-apt-fast > /dev/null
if [ $? == 0 ]; then
apt="ss-apt-fast"
fi
# 添加源
if [ $system = "0" ]; then
${debianSource[$systemVersion]}
fi
if [ $system = "1" ]; then
${ubuntuSource[$systemVersion]}
fi
sudo $apt update
# 安装 Wine
wineInstall=("sudo $apt install --install-recommends winehq-stable" "sudo $apt install --install-recommends winehq-devel" "sudo $apt install --install-recommends winehq-staging")
${wineInstall[$programVersion]}
echo "按回车键退出"
read

@ -8,6 +8,16 @@ build:
cp -rv VM-source/Windows7X86Auto.iso VM
cp -rv VM-source/run.py VM
zip -v -q -r package-script.zip package-script
#rm -rfv dlls.7z
#rm -rfv dlls-arm.7z
#rm -rfv dxvk.7z
#rm -rfv exagear.7z
#rm -rfv wined3d.dll.so.7z
#7z a dlls.7z dlls
#7z a dlls-arm.7z dlls-arm
#7z a dxvk.7z dxvk
#7z a exagear.7z exagear
#7z a wined3d.dll.so.7z wined3d.dll.so
cp -rv VM deb/opt/apps/deepin-wine-runner
cp -rv AllInstall.py deb/opt/apps/deepin-wine-runner
cp -rv BeCyIconGrabber.exe deb/opt/apps/deepin-wine-runner
@ -33,12 +43,18 @@ build:
cp -rv RunVM.sh deb/opt/apps/deepin-wine-runner
cp -rv "wine install" deb/opt/apps/deepin-wine-runner
cp -rv 窗体透明度设置工具.exe deb/opt/apps/deepin-wine-runner
cp -rv dlls deb/opt/apps/deepin-wine-runner
cp -rv dlls.7z deb/opt/apps/deepin-wine-runner
cp -rv UpdateGeek.sh deb/opt/apps/deepin-wine-runner
cp -rv AppStore.py deb/opt/apps/deepin-wine-runner
cp -rv InstallWineOnDeepin23.py deb/opt/apps/deepin-wine-runner
cp -rv dxvk deb/opt/apps/deepin-wine-runner
cp -rv dxvk.7z deb/opt/apps/deepin-wine-runner
cp -rv InstallFont.py deb/opt/apps/deepin-wine-runner
cp -rv dlls-arm.7z deb/opt/apps/deepin-wine-runner
cp -rv deepin.list deb/opt/apps/deepin-wine-runner
cp -rv sparkstore.list deb/opt/apps/deepin-wine-runner
cp -rv wined3d.dll.so.7z deb/opt/apps/deepin-wine-runner
cp -rv clean-unuse-program.py deb/opt/apps/deepin-wine-runner
cp -rv InstallNewWineHQ.sh deb/opt/apps/deepin-wine-runner
dpkg -b deb spark-deepin-wine-runner.deb
@ -46,7 +62,7 @@ install:
make build
sudo apt update
#sudo dpkg -i spark-deepin-wine-runner.deb
sudo apt install ./spark-deepin-wine-runner.deb -y --allow-downgrades
sudo apt reinstall ./spark-deepin-wine-runner.deb -y --allow-downgrades
remove:
sudo apt purge spark-deepin-wine-runner

85
clean-unuse-program.py Executable file

@ -0,0 +1,85 @@
#!/usr/bin/env python3
import os
if __name__ == "__main__":
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
print("此程序可以帮助您删除程序无需的组件以节约空间")
print("如果删除后想要恢复这样组件需要重新安装该软件包")
delProgramList = []
delProramCommand = "#!/bin/bash\n"
for i in [
[
"Wine 打包器(不基于生态打包脚本)",
[
f"{programPath}/dlls.7z",
f"{programPath}/dlls",
f"{programPath}/exagear",
f"{programPath}/exagear.7z",
f"{programPath}/exagear",
f"{programPath}/wined3d.dll.so.7z",
f"{programPath}/wined3d.dll.so",
f"{programPath}/deepin-wine-packager.py",
"/usr/bin/deepin-wine-package-builder",
"/usr/share/applications/spark-deepin-wine-package-builder.desktop"
]
],
[
"Wine 打包器(基于生态打包脚本)",
[
f"{programPath}/deepin-wine-packager-with-script.py",
f"{programPath}/package-script.zip",
f"{programPath}/package-script",
"/usr/bin/deepin-wine-packager-with-script",
"/usr/share/applications/spark-deepin-wine-packager-with-script.desktop"
]
],
[
"Arm 64 box86 wine 运行 DLL",
[
f"{programPath}/dlls-arm.7z",
f"{programPath}/dlls-arm"
]
],
[
"Windows 虚拟机简易安装组件",
[
f"{programPath}/StartVM.sh",
f"{programPath}/RunVM.sh",
f"{programPath}/VM",
"/usr/share/applications/spark-deepin-wine-runner-control-vm.desktop",
"/usr/share/applications/spark-deepin-wine-runner-start-vm.desktop"
]
],
[
"Wine 安装组件",
[
f"{programPath}/AllInstall.py",
f"{programPath}/wine install",
f"{programPath}/InstallWineOnDeepin23.py",
f"{programPath}/sparkstore.list",
f"{programPath}/InstallNewWineHQ.sh",
"/usr/bin/deepin-wine-runner-wine-installer",
"/usr/bin/deepin-wine-runner-wine-install-deepin23",
"/usr/bin/deepin-wine-runner-wine-install",
"/usr/bin/deepin-wine-runner-winehq-install"
]
]
]:
if not os.path.exists(i[1][0]):
continue
if input(f"是否删除组件“{i[0]}”?[Y/n]").upper() == "Y":
delProgramList.append(i)
for x in i[1]:
if x == "/*" or x == "/": # 为了防止个人疏忽,出现危险命令,所以如果有最危险的 /* 会直接跳过该命令的写入
continue
delProramCommand += f"rm -rfv \"{x}\"\n"
if len(delProgramList) == 0:
print("您已经删除了所有可删除的组件,如果需要使用被删除的组件,请重新安装该软件安装包")
input("按回车退出")
exit()
print("开始删除")
file = open("/tmp/deepin-wine-clean.sh", "w")
file.write(delProramCommand)
file.close()
os.system("pkexec bash /tmp/deepin-wine-clean.sh")
input("按回车键退出程序")

393
cleanbottle.sh Executable file

@ -0,0 +1,393 @@
#!/bin/sh
if [ $WINE = "" ]; then
WINE_CMD="deepin-wine5"
else
WINE_CMD=$WINE
fi
userdir=$USER
remove_file()
{
echo "============remove [$1]"
rm -rfv "$1"
}
purge_dir()
{
echo "=============clean [$1]"
if [ -e "$1" ]; then
find "$1" -mindepth 1 -ignore_readdir_race -exec rm -rfv {} \;
else
mkdir -p "$1"
fi
}
clean_gecko()
{
geckoid=$($WINE_CMD $BottleBase/windows/system32/uninstaller.exe --list | grep Gecko | cut -d"|" -f1)
echo " gecko GUID: ${geckoid}"
if [ -n "${geckoid}" ]; then
echo "uninstall gecko..."
$WINE_CMD $BottleBase/windows/system32/uninstaller.exe --remove ${geckoid}
fi
if [ -e "$BottleBase/windows/system32/gecko" ]; then
for i in $(ls "$BottleBase/windows/system32/gecko/" | grep -v plugin); do
echo "=============remove gecko dir [$i]"
rm -rfv "$BottleBase/windows/system32/gecko/$i"
done
fi
}
clean_common_temp()
{
remove_file "$BottleBase/../winetricks.log"
purge_dir "$BottleBase/windows/ControlPanelDB"
remove_file "$BottleBase/windows/control-panel.db"
purge_dir "$BottleBase/windows/temp"
purge_dir "$BottleBase/windows/Installer"
purge_dir "$BottleBase/users/$userdir/Temp"
purge_dir "$BottleBase/users/$userdir/Cookies"
purge_dir "$BottleBase/users/$userdir/Recent"
remove_file "$BottleBase/users/$userdir/Application Data/pcmaster"
purge_dir "$BottleBase/users/$userdir/Application Data/wine_gecko"
purge_dir "$BottleBase/users/$userdir/Local Settings/History"
purge_dir "$BottleBase/users/$userdir/Local Settings/Temporary Internet Files"
#remove_file "$BottleBase/users/${USER}"
purge_dir "$BottleBase/users/Public/Temp"
remove_file "$BottleBase/../PACKAGE_VERSION"
remove_file "$BottleBase/../update.policy"
purge_dir "$BottleBase/deepin"
}
cleanup_aliwangwang()
{
if [ ! -e "$BottleBase/Program Files/AliWangWang/AliIM.exe" ]; then return; fi
echo "++++AliWangWang detected. cleaning..."
purge_dir "$BottleBase/Program Files/AliWangWang/profiles"
purge_dir "$BottleBase/Program Files/AliWangWang/new"
purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/aef"
purge_dir "$BottleBase/users/$userdir/Application Data/AliWangWang"
purge_dir "$BottleBase/users/$userdir/Application Data/TaobaoProtect"
purge_dir "$BottleBase/users/$userdir/Application Data/wwbizsrv"
}
cleanup_aliworkbench()
{
if [ ! -e "$BottleBase/Program Files/AliWorkbench/AliWorkbench.exe" ]; then return; fi
echo "++++AliWorkbench detected. cleaning..."
purge_dir "$BottleBase/users/Public/Documents/AliWorkbench"
purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/aef/"
purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/AliWorkbench/"
purge_dir "$BottleBase/users/$userdir/Application Data/AliWorkbench/"
}
cleanup_flash()
{
if [ ! -e "$BottleBase/windows/system32/Macromed/Flash/" ]; then return; fi
echo "++++flash detected. cleaning..."
remove_file "$BottleBase/users/$userdir/Application Data/Adobe"
remove_file "$BottleBase/users/$userdir/Application Data/Macromedia"
remove_file "$BottleBase/windows/system32/FlashPlayerApp.exe"
remove_file "$BottleBase/windows/ControlPanelDB/FlashPlayerCPLApp.ico"
remove_file "$BottleBase/windows/system32/FlashPlayerCPLApp.cpl"
remove_file "$BottleBase/windows/system32/Macromed/Flash/FlashInstall.log"
#remove_file "$BottleBase/windows/system32/Macromed/Flash/Flash*.dll"
#remove_file "$BottleBase/windows/system32/Macromed/Flash/Flash*.exe"
}
cleanup_foobar2000()
{
if [ ! -e "$BottleBase/Program Files/foobar2000/foobar2000.exe" ]; then return; fi
echo "++++foobar2000 detected. cleaning..."
purge_dir "$BottleBase/Program Files/foobar2000/configuration"
purge_dir "$BottleBase/Program Files/foobar2000/library"
purge_dir "$BottleBase/Program Files/foobar2000/playlists-v1.3"
remove_file "$BottleBase/Program Files/foobar2000/theme.fth"
}
cleanup_mailmaster()
{
if [ ! -e "$BottleBase/Program Files/Netease/MailMaster/MailMaster.exe" ]; then return; fi
echo "++++MailMaster detected. cleaning..."
remove_file "$BottleBase/Program Files/Netease/MailMaster/account"
remove_file "$BottleBase/Program Files/Netease/MailMaster/address"
remove_file "$BottleBase/Program Files/Netease/MailMaster/tmp"
remove_file "$BottleBase/Program Files/Netease/MailMaster/UpdateTemp"
remove_file "$BottleBase/Program Files/Netease/MailMaster/applog.txt"
remove_file "$BottleBase/Program Files/Netease/MailMaster/netlog.txt"
remove_file "$BottleBase/Program Files/Netease/MailMaster/global.cfg"
remove_file "$BottleBase/Program Files/Netease/MailMaster/schd.sdb"
}
cleanup_nativeie()
{
if [ ! -e "$BottleBase/Program Files/Internet Explorer/iexplore.exe.mui" ]; then return; fi
echo "++++native IE detected. cleaning..."
purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/Microsoft/"
remove_file "$BottleBase/windows/ie8"
remove_file "$BottleBase/windows/%DownloadedProgramFiles%"
#remove all useless gecko files
remove_file "$BottleBase/windows/system32/gecko"
}
cleanup_qq_before()
{
if [ ! -e "$BottleBase/Program Files/Tencent/QQ/Bin/QQ.exe" ]; then return; fi
echo "++++QQ detected. cleaning..."
if [ -f "$BottleBase/Program Files/Tencent/Qzone/QQPhotoDrawUpdateSvr.exe" ]; then
remove_file "$BottleBase/Program Files/Tencent/Qzone"
fi
if [ -f "$BottleBase/Program Files/Tencent/QQGameMicro/QQGameMicro.exe" ]; then
remove_file "$BottleBase/Program Files/Tencent/QQGameMicro"
fi
}
cleanup_qq()
{
if [ ! -e "$BottleBase/Program Files/Tencent/QQ/Bin/QQ.exe" ]; then return; fi
echo "++++cleaning QQ remains..."
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent"
purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/Tencent"
purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQPCMgr"
purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQProtect"
purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQDownload"
remove_file "$BottleBase/Program Files/Common Files/Tencent/Npchrome"
remove_file "$BottleBase/Program Files/Common Files/Tencent/QQDownload"
remove_file "$BottleBase/Program Files/Common Files/Tencent/QQMiniDL"
remove_file "$BottleBase/Program Files/Common Files/Tencent/TXFTN"
remove_file "$BottleBase/Program Files/Common Files/Tencent/TXPTOP"
remove_file "$BottleBase/Program Files/Common Files/Tencent/TXSSO"
purge_dir "$BottleBase/Program Files/Tencent/QQGameMicro"
purge_dir "$BottleBase/Program Files/Tencent/QQMusic"
remove_file "$BottleBase/Program Files/Tencent/QQ/Plugin/Com.Tencent.QQPet/bin/QQPet"
remove_file "$BottleBase/Program Files/Tencent/QQ/Users"
}
cleanup_tim()
{
if [ ! -e "$BottleBase/Program Files/Tencent/TIM/Bin/TIM.exe" ]; then return; fi
echo "++++cleaning TIM remains..."
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent"
purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/Tencent"
purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQPCMgr"
purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQProtect"
purge_dir "$BottleBase/users/Public/Application Data/Tencent/QQDownload"
remove_file "$BottleBase/Program Files/Common Files/Tencent/Npchrome"
remove_file "$BottleBase/Program Files/Common Files/Tencent/QQDownload"
remove_file "$BottleBase/Program Files/Common Files/Tencent/QQMiniDL"
remove_file "$BottleBase/Program Files/Common Files/Tencent/TXFTN"
remove_file "$BottleBase/Program Files/Common Files/Tencent/TXPTOP"
remove_file "$BottleBase/Program Files/Common Files/Tencent/TXSSO"
purge_dir "$BottleBase/Program Files/Tencent/QQGameMicro"
purge_dir "$BottleBase/Program Files/Tencent/QQMusic"
purge_dir "$BottleBase/Program Files/Tencent/SSPlus"
remove_file "$BottleBase/Program Files/Tencent/TIM/Users"
}
cleanup_wxwork()
{
if [ ! -e "$BottleBase/Program Files/WXWork/WXWork.exe" ]; then return; fi
echo "++++cleaning WXWork remains..."
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent"
}
cleanup_wechat()
{
if [ ! -e "$BottleBase/Program Files/Tencent/WeChat/WeChat.exe" ]; then return; fi
echo "++++cleaning WeChat remains..."
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent"
}
cleanup_baidupan()
{
if [ ! -e "$BottleBase/Program Files/baidu/BaiduNetdisk/baidunetdisk.exe" ]; then return; fi
echo "++++cleaning baidu net disk remains..."
purge_dir "$BottleBase/users/$userdir/Application Data/BaiduYunGuanjia"
purge_dir "$BottleBase/users/$userdir/Application Data/BaiduYunKernel"
purge_dir "$BottleBase/BaiduNetdiskDownload"
purge_dir "$BottleBase/Program Files/baidu/Download"
remove_file "$BottleBase/Program Files/baidu/BaiduNetdisk/users"
}
cleanup_foxmail()
{
if [ ! -e "$BottleBase/Program Files/Foxmail 7.2/Foxmail.exe" ]; then return; fi
echo "++++cleaning Foxmail remains..."
purge_dir "$BottleBase/users/$userdir/Application Data/HBuilder"
remove_file "$BottleBase/Program Files/Foxmail 7.2/Storage"
remove_file "$BottleBase/Program Files/Foxmail 7.2/FMStorage.list"
}
cleanup_hbuilder()
{
if [ ! -e "$BottleBase/Program Files/HBuilder/HBuilder.exe" ]; then return; fi
echo "++++cleaning HBuilder remains..."
purge_dir "$BottleBase/users/$userdir/Application Data/HBuilder"
purge_dir "$BottleBase/users/$userdir/HBuilder"
purge_dir "$BottleBase/users/$userdir/HBuilder settings"
$WINE_CMD reg DELETE "HKCU\\Software\\HBuilder" /f
}
cleanup_thunderspeed()
{
if [ ! -e "$BottleBase/Program Files/Thunder Network/Thunder/Program/Thunder.exe" ]; then return; fi
echo "++++cleaning ThunderSpeed remains..."
purge_dir "$BottleBase/users/$userdir/AppData/LocalLow/Thunder Network"
purge_dir "$BottleBase/users/Public/Application Data/Thunder Network"
purge_dir "$BottleBase/users/Public/Thunder Network"
purge_dir "$BottleBase/Program Files/Thunder Network/Thunder/Data/ThunderPush"
purge_dir "$BottleBase/Program Files/Thunder Network/Thunder/Data/SmallHornCtrlCenter"
purge_dir "$BottleBase/Program Files/Thunder Network/Thunder/XLApp"
}
cleanup_qqdownload()
{
if [ ! -e "$BottleBase/Program Files/Tencent/QQDownload/QQDownload.exe" ]; then return; fi
echo "++++QQDownload detected. cleaning..."
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/TXSSO/SetupLogs"
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/Logs"
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/QQDownload"
#mkdir -p "$BottleBase/users/$userdir/Application Data/Tencent/QQDownload/115248456/Setting"
}
cleanup_qqcrm()
{
if [ ! -e "$BottleBase/Program Files/Tencent/BizQQ/Bin/QQCRM.exe" ]; then return; fi
echo "++++QQCRM detected. cleaning..."
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/Logs"
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/QQCRM/STemp"
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/TXSSO"
}
cleanup_qqeim()
{
if [ ! -e "$BottleBase/Program Files/Tencent/QQEIM/Bin/QQEIM.exe" ]; then return; fi
echo "++++QQEIM detected. cleaning..."
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/Logs"
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/QQEIM/STemp"
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent/TXSSO"
}
cleanup_richez()
{
if [ ! -e "$BottleBase/GTJA/RichEZ/TdxW.exe" ]; then return; fi
echo "++++Richez detected. cleaning..."
remove_file "$BottleBase/GTJA/RichEZ/JBPlugins/pyerr"
remove_file "$BottleBase/GTJA/RichEZ/RichET/bin/flyingfish.log"
purge_dir "$BottleBase/GTJA/RichEZ/RichET/fflog"
purge_dir "$BottleBase/GTJA/RichEZ/RichET/tmp"
remove_file "$BottleBase/GTJA/RichEZ/T0002/customcfg_gtjazd.zip"
remove_file "$BottleBase/GTJA/RichEZ/T0002/hq_cache"
purge_dir "$BottleBase/GTJA/RichEZ/T0002/tmp"
remove_file "$BottleBase/GTJA/RichEZ/T0002/xml_cache"
remove_file "$BottleBase/GTJA/RichEZ/webs/web_cache"
}
software_cleaner_before()
{
cleanup_qq_before
}
cleanup_qqlite()
{
if [ ! -e "$BottleBase/Program Files/Tencent/QQLite/Bin/QQ.exe" ]; then return; fi
echo "++++cleaning QQ Lite remains..."
purge_dir "$BottleBase/users/$userdir/Application Data/Tencent"
purge_dir "$BottleBase/users/$userdir/Local Settings/Application Data/Tencent"
purge_dir "$BottleBase/users/Public/Application Data/Tencent"
remove_file "$BottleBase/Program Files/Common Files/Tencent/Npchrome"
remove_file "$BottleBase/Program Files/Common Files/Tencent/QQDownload"
remove_file "$BottleBase/Program Files/Common Files/Tencent/QQMiniDL"
remove_file "$BottleBase/Program Files/Common Files/Tencent/TXFTN"
remove_file "$BottleBase/Program Files/Common Files/Tencent/TXPTOP"
remove_file "$BottleBase/Program Files/Common Files/Tencent/TXSSO"
remove_file "$BottleBase/Program Files/Tencent/QQLite/Users"
}
cleanup_youku()
{
if [ ! -e "$BottleBase/Program Files/YouKu/YoukuClient/YoukuDesktop.exe" ]; then return; fi
echo "++++cleaning YouKu remains..."
purge_dir "$BottleBase/Program Files/YouKu/YoukuClient/repaire"
purge_dir "$BottleBase/users/$userdir/Application Data/youku"
purge_dir "$BottleBase/users/$userdir/Application Data/ytmediacenter"
}
software_cleaner()
{
cleanup_aliwangwang
cleanup_aliworkbench
#cleanup_flash
cleanup_foobar2000
cleanup_mailmaster
cleanup_nativeie
cleanup_qq
cleanup_tim
cleanup_qqdownload
cleanup_qqeim
cleanup_qqcrm
cleanup_richez
cleanup_qqlite
cleanup_youku
cleanup_foxmail
cleanup_thunderspeed
cleanup_wechat
cleanup_wxwork
cleanup_baidupan
cleanup_hbuilder
}
#=============================================
if [ -z "$1" ]; then
echo "prefix should be given"
exit 1
fi
WINEPREFIX=$1
BottlePath=$1
BottleBase=${BottlePath}/drive_c
if [ ! -d "${BottlePath}" ]; then
echo "prefix do not exists"
exit 2
fi
#if [ ! -e "${BottlePath}/.update-timestamp" ]; then
# echo "invalid prefix"
# exit 3
#fi
echo "clean $BottlePath"
export WINEPREFIX=${BottlePath}
/usr/lib/i386-linux-gnu/deepin-wine5/wineserver -k
software_cleaner_before
clean_gecko
software_cleaner
clean_common_temp
exit 0

@ -1,5 +1,5 @@
Package: spark-deepin-wine-runner
Version: 1.9.0Alpha2
Version: 1.9.0
Maintainer: gfdgd xi <3025613752@qq.com>, 为什么您不喜欢熊出没和阿布呢
Homepage: https://gitee.com/gfdgd-xi/deep-wine-runner
Architecture: all

@ -1,3 +1,25 @@
# !/bin/sh
#!/bin/sh
# 如果为非 X86 PC可以删除掉一些无用组件主要是用不了
if [ `arch` != "x86_64" ]; then
echo 非X86架构删除对非X86架构无用的组件
# 删除虚拟机功能
rm -rf /opt/apps/deepin-wine-runner/StartVM.sh
rm -rf /opt/apps/deepin-wine-runner/RunVM.sh
rm -rf /opt/apps/deepin-wine-runner/VM
rm -rf /usr/share/applications/spark-deepin-wine-runner-control-vm.desktop
rm -rf /usr/share/applications/spark-deepin-wine-runner-start-vm.desktop
# 删除安装 wine 功能
rm -rf "/opt/apps/deepin-wine-runner/wine install"
rm -rf /usr/bin/deepin-wine-runner-wine-installer
rm -rf /usr/bin/deepin-wine-runner-wine-install-deepin23
rm -rf /usr/bin/deepin-wine-runner-wine-install
rm -rf /usr/bin/deepin-wine-runner-winehq-install
rm -rf /opt/apps/deepin-wine-runner/InstallWineOnDeepin23.py
rm -rf /opt/apps/deepin-wine-runner/sparkstore.list
rm -rf /opt/apps/deepin-wine-runner/AllInstall.py
rm -rf /opt/apps/deepin-wine-runner/InstallNewWineHQ.sh
fi
# 设置目录权限,让用户可读可写,方便后续删除组件
chmod 777 -R /opt/apps/deepin-wine-runner
# 向服务器返回安装数加1不显示内容且忽略错误
curl http://120.25.153.144/spark-deepin-wine-runner/Install.php?Version=1.9.0 -s > /dev/null | true
curl http://120.25.153.144/spark-deepin-wine-runner/Install.php?Version=1.9.0 -s > /dev/null | true

3
deb/DEBIAN/postrm Executable file

@ -0,0 +1,3 @@
#!/bin/sh
# 删除软件残留
rm -rfv /opt/apps/spark-deepin-wine-runner/*

@ -22,11 +22,12 @@ def AddSparkStoreSource():
os.system("sudo apt update -o Dir::Etc::sourcelist=\"sources.list.d/sparkstore.list\" -o Dir::Etc::sourceparts=\"-\" -o APT::Get::List-Cleanup=\"0\"")
def InstallSparkWine(wine):
if os.path.exists("/usr/local/bin/ss-apt-fast"):
os.system("sudo apt install apt-fast -y")
os.system(f"sudo ss-apt-fast install \"{wine}\" -y")
return
os.system(f"sudo apt install \"{wine}\" -y")
#if os.path.exists("/usr/local/bin/ss-apt-fast"):
#os.system("sudo apt install apt-fast -y")
#os.system(f"sudo ss-apt-fast install \"{wine}\" -y")
#return
os.system("sudo ss-apt-fast update")
os.system(f"sudo ss-apt-fast install \"{wine}\" -y")
###################
# 程序功能
@ -47,12 +48,8 @@ print("请问是否要安装 deepin-wine[Y/N]", end=' ')
choose = input().upper()
if not choose == "N":
os.system("sudo apt install deepin-wine -y")
print("请问是否要安装 deepin-wine5需要添加星火应用商店的源[Y/N]", end=' ')
print("请问是否要安装 deepin-wine5需要安装最新版星火应用商店[Y/N]", end=' ')
choose = input().upper()
if not choose == "N":
if not os.path.exists("/etc/apt/sources.list.d/sparkstore.list"):
AddSparkStoreSource()
InstallSparkWine("deepin-wine5")
print("请问是否要安装 deepin-wine5-stable[Y/N]", end=' ')
choose = input().upper()
if not choose == "N":
@ -61,11 +58,9 @@ print("请问是否要安装 deepin-wine6-stable[Y/N]", end=' ')
choose = input().upper()
if not choose == "N":
os.system("sudo apt install deepin-wine6-stable -y")
print("请问是否要安装 spark-wine7-devel需要添加星火应用商店的源[Y/N]", end=' ')
print("请问是否要安装 spark-wine7-devel需要安装最新版星火应用商店[Y/N]", end=' ')
choose = input().upper()
if not choose == "N":
if not os.path.exists("/etc/apt/sources.list.d/sparkstore.list"):
AddSparkStoreSource()
InstallSparkWine("spark-wine7-devel")
print("请问是否要安装 ukylin-wine需要添加 ukylin 源,但因为可能会导致系统问题,将不会自动添加)?[Y/N]", end=" ")
choose = input().upper()

@ -0,0 +1,67 @@
#!/bin/bash
ubuntuSource=(
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/impish/winehq-impish.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/focal/winehq-focal.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/bionic/winehq-bionic.sources"
)
debianSource=(
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/buster/winehq-buster.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bullseye/winehq-bullseye.sources"
"sudo wget -nc -P /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bookworm/winehq-bookworm.sources"
)
# 选择发行版
toilet WineHQ
echo "WineHQ 官网https://wiki.winehq.org/"
echo
echo "选择发行版:"
echo "0. Debian"
echo "1. Ubuntu"
read system
# 选择版本
echo "选择系统版本"
if [ $system = "0" ]; then
echo "0. Debian 10 (Buster)"
echo "1. Debian 11 (Bullseye)"
echo "2. Debian Testing (Bookworm)"
fi
if [ $system = "1" ]; then
echo "0. Ubuntu 22.04"
echo "1. Ubuntu 21.10"
echo "2. Ubuntu 20.04Linux Mint 20.x"
echo "3. Ubuntu 18.04Linux Mint 19.x"
fi
read systemVersion
# 选择 Wine
echo "选择 Wine"
echo "0. 稳定分支"
echo "1. 开发分支"
echo "2. Staging 分支"
read programVersion
# 初步配置
sudo apt-key del "D43F 6401 4536 9C51 D786 DDEA 76F1 A20F F987 672F"
sudo dpkg --add-architecture i386
sudo wget -nc -O /usr/share/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
# 检测 apt-fast 或 ss-apt-fast 是否存在
apt="apt"
which apt-fast > /dev/null
if [ $? == 0 ]; then
apt="apt-fast"
fi
which ss-apt-fast > /dev/null
if [ $? == 0 ]; then
apt="ss-apt-fast"
fi
# 添加源
if [ $system = "0" ]; then
${debianSource[$systemVersion]}
fi
if [ $system = "1" ]; then
${ubuntuSource[$systemVersion]}
fi
sudo $apt update
# 安装 Wine
wineInstall=("sudo $apt install --install-recommends winehq-stable" "sudo $apt install --install-recommends winehq-devel" "sudo $apt install --install-recommends winehq-staging")
${wineInstall[$programVersion]}
echo "按回车键退出"
read

@ -1,22 +0,0 @@
#!/bin/bash
# 使用系统默认的 bash 运行
###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本1.7.0
# 更新时间2022年07月15日
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 的 tkinter 构建
###########################################################################################
VBoxManage showvminfo Windows
if test 0 == $?; then
# 检测到虚拟机存在,启动虚拟机
VBoxManage startvm Windows
exit
fi
zenity --question --no-wrap --text="检查到您未创建所指定的虚拟机,是否创建虚拟机并继续?\n如果不创建将无法使用"
if test 1 == $?; then
# 用户不想创建虚拟机,结束
exit
fi
cd `dirname $0`
./VM/VirtualMachine

Binary file not shown.

Before

(image error) Size: 35 KiB

@ -0,0 +1,85 @@
#!/usr/bin/env python3
import os
if __name__ == "__main__":
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
print("此程序可以帮助您删除程序无需的组件以节约空间")
print("如果删除后想要恢复这样组件需要重新安装该软件包")
delProgramList = []
delProramCommand = "#!/bin/bash\n"
for i in [
[
"Wine 打包器(不基于生态打包脚本)",
[
f"{programPath}/dlls.7z",
f"{programPath}/dlls",
f"{programPath}/exagear",
f"{programPath}/exagear.7z",
f"{programPath}/exagear",
f"{programPath}/wined3d.dll.so.7z",
f"{programPath}/wined3d.dll.so",
f"{programPath}/deepin-wine-packager.py",
"/usr/bin/deepin-wine-package-builder",
"/usr/share/applications/spark-deepin-wine-package-builder.desktop"
]
],
[
"Wine 打包器(基于生态打包脚本)",
[
f"{programPath}/deepin-wine-packager-with-script.py",
f"{programPath}/package-script.zip",
f"{programPath}/package-script",
"/usr/bin/deepin-wine-packager-with-script",
"/usr/share/applications/spark-deepin-wine-packager-with-script.desktop"
]
],
[
"Arm 64 box86 wine 运行 DLL",
[
f"{programPath}/dlls-arm.7z",
f"{programPath}/dlls-arm"
]
],
[
"Windows 虚拟机简易安装组件",
[
f"{programPath}/StartVM.sh",
f"{programPath}/RunVM.sh",
f"{programPath}/VM",
"/usr/share/applications/spark-deepin-wine-runner-control-vm.desktop",
"/usr/share/applications/spark-deepin-wine-runner-start-vm.desktop"
]
],
[
"Wine 安装组件",
[
f"{programPath}/AllInstall.py",
f"{programPath}/wine install",
f"{programPath}/InstallWineOnDeepin23.py",
f"{programPath}/sparkstore.list",
f"{programPath}/InstallNewWineHQ.sh",
"/usr/bin/deepin-wine-runner-wine-installer",
"/usr/bin/deepin-wine-runner-wine-install-deepin23",
"/usr/bin/deepin-wine-runner-wine-install",
"/usr/bin/deepin-wine-runner-winehq-install"
]
]
]:
if not os.path.exists(i[1][0]):
continue
if input(f"是否删除组件“{i[0]}”?[Y/n]").upper() == "Y":
delProgramList.append(i)
for x in i[1]:
if x == "/*" or x == "/": # 为了防止个人疏忽,出现危险命令,所以如果有最危险的 /* 会直接跳过该命令的写入
continue
delProramCommand += f"rm -rfv \"{x}\"\n"
if len(delProgramList) == 0:
print("您已经删除了所有可删除的组件,如果需要使用被删除的组件,请重新安装该软件安装包")
input("按回车退出")
exit()
print("开始删除")
file = open("/tmp/deepin-wine-clean.sh", "w")
file.write(delProramCommand)
file.close()
os.system("pkexec bash /tmp/deepin-wine-clean.sh")
input("按回车键退出程序")

@ -61,6 +61,9 @@ def disabled_or_NORMAL_all(choose):
option1_text.setDisabled(choose)
chooseWineHelperValue.setDisabled(choose)
wineVersion.setDisabled(choose)
debArch.setDisabled(choose)
if not choose:
ChangeArchCombobox()
class QT:
thread = None
@ -157,82 +160,17 @@ class make_deb_threading(QtCore.QThread):
disabled_or_NORMAL_all(True)
self.label.emit("容器路径填写错误,无法进行构建 deb 包")
return
#############
# 删除文件
#############
self.label.emit("正在删除对构建 deb 包有影响的文件……")
debPackagePath = f"/tmp/{random.randint(0, 9999)}"
self.run_command(f"rm -rfv /tmp/{debPackagePath}")
###############
# 创建目录
###############
self.label.emit("正在创建目录……")
os.makedirs("{}/DEBIAN".format(debPackagePath))
os.makedirs("{}/opt/apps/{}/entries/applications".format(debPackagePath, e1_text.text()))
os.makedirs("{}/opt/apps/{}/entries/icons/hicolor/scalable/apps".format(debPackagePath, e1_text.text()))
os.makedirs("{}/opt/apps/{}/files".format(debPackagePath, e1_text.text()))
###############
# 创建文件
###############
self.label.emit("正在创建文件……")
os.mknod("{}/DEBIAN/control".format(debPackagePath))
os.mknod("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()))
os.mknod("{}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
os.mknod("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()))
###############
# 设置容器
###############
self.label.emit("正在设置 wine 容器")
os.chdir(b)
self.run_command("sed -i \"s#$USER#@current_user@#\" ./*.reg")
os.chdir(f"{b}/drive_c/users")
self.run_command(f"mv -v '{os.getlogin()}' @current_user@")
os.chdir(programPath)
###############
# 压缩容器
###############
self.label.emit("正在打包 wine 容器")
self.run_command("7z a {}/opt/apps/{}/files/files.7z {}/*".format(debPackagePath, e1_text.text(), b))
###############
# 复制图片
###############
self.label.emit("正在复制文件……")
self.run_command(f"cp -rv '{programPath}/dlls' {debPackagePath}/opt/apps/{e1_text.text()}/files/")
if e9_text.text() != "":
shutil.copy(e9_text.text(), "{}/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}.{}".format(debPackagePath, e1_text.text(), e1_text.text(), imms))
################
# 获取文件大小
################
self.label.emit("正在计算文件大小……")
size = getFileFolderSize(debPackagePath) / 1024
################
# 写入文本文档
################
self.label.emit("正在写入文件……")
if not chooseWineHelperValue.isChecked():
write_txt("{}/DEBIAN/control".format(debPackagePath), '''Package: {}
Version: {}
Architecture: i386
Maintainer: {}
Depends: {}, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei
Section: non-free/otherosfs
Priority: optional
Multi-Arch: foreign
Description: {}
'''.format(e1_text.text(), e2_text.text(), e4_text.text(), wine[wineVersion.currentText()], e3_text.text()))
else:
write_txt("{}/DEBIAN/control".format(debPackagePath), '''Package: {}
Version: {}
Architecture: i386
Maintainer: {}
Depends: {}, spark-dwine-helper (>= 1.6.2), fonts-wqy-microhei, fonts-wqy-zenhei
Section: non-free/otherosfs
Priority: optional
Multi-Arch: foreign
Description: {}
'''.format(e1_text.text(), e2_text.text(), e4_text.text(), wine[wineVersion.currentText()], e3_text.text()))
if rmBash.isChecked():
write_txt("{}/DEBIAN/postrm".format(debPackagePath, e1_text.text()), f'''#!/bin/bash
debInformation = [
{
# I386 wine 打包配置文件
"Wine": wine[wineVersion.currentText()],
"Architecture": "i386",
"Depends": [
f"{wine[wineVersion.currentText()]}, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei",
f"{wine[wineVersion.currentText()]}, spark-dwine-helper (>= 1.6.2), fonts-wqy-microhei, fonts-wqy-zenhei"
][int(chooseWineHelperValue.isChecked())],
"postinst": "",
"postrm": ["", f"""#!/bin/bash
if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
@ -247,11 +185,9 @@ fi
done
else
echo"非卸载,跳过清理"
fi
''')
write_txt("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()), '#!/usr/bin/env xdg-open\n[Desktop Entry]\nEncoding=UTF-8\nType=Application\nX-Created-By={}\nCategories={};\nIcon={}\nExec="/opt/apps/{}/files/run.sh" {}\nName={}\nComment={}\nMimeType={}\nGenericName={}\nTerminal=false\nStartupNotify=false\n'.format(e4_text.text(), option1_text.currentText(), a, e1_text.text(), e15_text.text(), e8_text.text(), e3_text.text(), e10_text.text(), e1_text.text()))
if not bool(chooseWineHelperValue.text()):
write_txt("{}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()), '''#!/bin/sh
fi"""][int()],
"run.sh": [
f"""#!/bin/sh
# Copyright (C) 2016 Deepin, Inc.
#
@ -260,13 +196,13 @@ fi
version_gt() {{ test "$(echo "$@" | tr " " "\\n" | sort -V | head -n 1)" != "$1"; }}
BOTTLENAME="{}"
APPVER="{}"
EXEC_PATH="{}"
BOTTLENAME="{e5_text.text()}"
APPVER="{e2_text.text()}"
EXEC_PATH="{e7_text.text()}"
START_SHELL_PATH="/opt/deepinwine/tools/run_v4.sh"
export MIME_TYPE=""
export DEB_PACKAGE_NAME="{}"
export APPRUN_CMD="{}"
export DEB_PACKAGE_NAME="{e1_text.text()}"
export APPRUN_CMD="{wine[wineVersion.currentText()]}"
DISABLE_ATTACH_FILE_DIALOG=""
EXPORT_ENVS=""
@ -294,10 +230,8 @@ if [ -n "$EXEC_PATH" ];then
fi
else
$START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@"
fi
'''.format(e5_text.text(), e2_text.text(), e7_text.text(), e1_text.text(), wine[wineVersion.currentText()]))
else:
write_txt("{}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()), '''#!/bin/sh
fi""",
f"""#!/bin/sh
# Copyright (C) 2016 Deepin, Inc.
#
@ -333,16 +267,16 @@ Get_Dist_Name()
version_gt() {{ test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }}
####用于比较版本?未实装
BOTTLENAME="{}"
APPVER="{}"
EXEC_PATH="{}"
BOTTLENAME="{e5_text.text()}"
APPVER="{e2_text.text()}"
EXEC_PATH="{e7_text.text()}"
##### 软件在wine中的启动路径
START_SHELL_PATH="/opt/deepinwine/tools/spark_run_v4.sh"
export MIME_TYPE=""
#####没什么用
export DEB_PACKAGE_NAME="{}"
export DEB_PACKAGE_NAME="{e1_text.text()}"
####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关
export APPRUN_CMD="{}"
export APPRUN_CMD="{wine[wineVersion.currentText()]}"
#####wine启动指令建议
EXPORT_ENVS=""
@ -403,15 +337,412 @@ if [ -n "$EXEC_PATH" ];then
fi
else
$START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@"
fi"""
][chooseWineHelperValue.isChecked()],
"info": f'''{{
"appid": "{e1_text.text()}",
"name": "{e8_text.text()}",
"version": "{e2_text.text()}",
"arch": ["i386"],
"permissions": {{
"autostart": false,
"notification": false,
"trayicon": true,
"clipboard": true,
"account": false,
"bluetooth": false,
"camera": true,
"audio_record": true,
"installed_apps": false
}}
}}'''
},
{
# ARM64 BOX86 wine 打包配置文件
"Wine": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ",
"Architecture": "arm64",
"Depends": "deepin-elf-verify (>= 0.0.16.7-1), com.deepin-wine6-stable.deepin(>=6.0deepin14), com.deepin-box86.deepin(>=0.2.3deepin8), p7zip-full, fonts-wqy-microhei, fonts-noto-cjk",
"postinst": f"""#!/bin/sh
DEB_PATH=/opt/apps/{e1_text.text()}
NVIDIA_DISP_CARD=`lspci | grep VGA | grep NVIDIA`
if [ -f $DEB_PATH/files/wined3d.dll.so ] && [ ! -z "$NVIDIA_DISP_CARD" ];then
mv $DEB_PATH/files/wined3d.dll.so $DEB_PATH/files/dlls
fi
'''.format(e5_text.text(), e2_text.text(), e7_text.text(), e1_text.text(), wine[wineVersion.currentText()]))
write_txt("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()), '{\n "appid": "' + e1_text.text() + '",\n "name": "' + e8_text.text() + '",\n "version": "' + e2_text.text() + '",\n "arch": ["i386"],\n "permissions": {\n "autostart": false,\n "notification": false,\n "trayicon": true,\n "clipboard": true,\n "account": false,\n "bluetooth": false,\n "camera": false,\n "audio_record": false,\n "installed_apps": false\n }\n}')
true
""",
"postrm": f"""#!/bin/sh
BOTTLE="$HOME/.deepinwine/{e5_text.text()}"
WINESERVER=/opt/deepin-wine6-stable/bin/wineserver
if [ -d "$BOTTLE" ];then
WINEPREFIX=$BOTTLE $WINESERVER -k
rm $BOTTLE -rf
fi
true""",
"run.sh": f"""#!/bin/bash
DEB_PATH="/opt/apps/{e1_text.text()}"
WINE="/opt/deepin-wine6-stable/bin/wine"
WINESERVER="/opt/deepin-wine6-stable/bin/wineserver"
BOX86="/opt/deepin-box86/box86"
EXE="{e7_text.text()}"
NEW_VERSION="{e2_text.text()}"
BOTTLE="$HOME/.deepinwine/{e5_text.text()}"
reconstruct_bottle_symlink() {{
if [ -L $BOTTLE/drive_c/users/$USER/Desktop ]; then
rm -f $BOTTLE/drive_c/users/$USER/Desktop
ln -s $HOME/Desktop $BOTTLE/drive_c/users/$USER/Desktop
fi
if [ -L $BOTTLE/drive_c/users/$USER/Documents ]; then
rm -f $BOTTLE/drive_c/users/$USER/Documents
ln -s $HOME/Documents $BOTTLE/drive_c/users/$USER/Documents
fi
if [ -L $BOTTLE/drive_c/users/$USER/Downloads ]; then
rm -f $BOTTLE/drive_c/users/$USER/Downloads
ln -s $HOME/Downloads $BOTTLE/drive_c/users/$USER/Downloads
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Documents" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Documents"
ln -s $HOME/Documents "$BOTTLE/drive_c/users/$USER/My Documents"
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Music" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Music"
ln -s $HOME/Music "$BOTTLE/drive_c/users/$USER/My Music"
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Videos" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Videos"
ln -s $HOME/Videos "$BOTTLE/drive_c/users/$USER/My Videos"
fi
}}
if [ ! -d "$HOME/.deepinwine" ];then
mkdir -p "$HOME/.deepinwine"
fi
if [ -f $BOTTLE/VERSION ];then
old_version=""
while read line; do
old_version=$line
done < $BOTTLE/VERSION
if [ "$old_version" != "$NEW_VERSION" ];then
WINEPREFIX=$BOTTLE $BOX86 $WINESERVER -k
rm -rf $BOTTLE
fi
fi
if [ -d $BOTTLE ] && [ ! -f $BOTTLE/VERSION ];then
WINEPREFIX=$BOTTLE $BOX86 $WINESERVER -k
rm -rf $BOTTLE
fi
if [ ! -d $BOTTLE ];then
7z x "$DEB_PATH/files/files.7z" -o"$BOTTLE" -aoa
mv "$BOTTLE/drive_c/users/@current_user@" "$BOTTLE/drive_c/users/$USER"
sed -i "s#@current_user@#$USER#" $BOTTLE/*.reg
reconstruct_bottle_symlink
echo $NEW_VERSION > $BOTTLE/VERSION
fi
export WINEPREDLL=$DEB_PATH/files/dlls
export ATTACH_FILE_DIALOG=1
export WINEDLLPATH=/opt/deepin-wine6-stable/lib
WINEPREFIX=$BOTTLE $BOX86 $WINE "$EXE" &""",
"info": f'''{{
"appid": "{e1_text.text()}",
"name": "{e8_text.text()}",
"version": "{e2_text.text()}",
"arch": ["arm64"],
"permissions": {{
"autostart": false,
"notification": false,
"trayicon": true,
"clipboard": true,
"account": false,
"bluetooth": false,
"camera": true,
"audio_record": true,
"installed_apps": false
}}
}}'''
},
{
# ARM64 exagear wine 打包配置文件
"Wine": f"/opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ",
"Architecture": "arm64",
"Depends": "zenity, com.deepin-wine6-stable.deepin(>=6.0deepin14), deepin-wine-exagear-images(>=10deepin4), com.deepin-box86.deepin(>=0.2.3deepin9), p7zip-full, fonts-wqy-microhei, fonts-noto-cjk",
"postinst": "",
"postrm": "",
"run.sh": f"""#!/bin/bash
DEB_PATH="/opt/apps/{e1_text.text()}"
WINE="/opt/deepin-wine6-stable/bin/wine"
WINESERVER="/opt/deepin-wine6-stable/bin/wineserver"
EMU="/opt/exagear/bin/ubt_x64a64_al"
IMAGE_PATH=$HOME/.deepinwine/debian-buster
EMU_ARGS="--path-prefix $IMAGE_PATH --utmp-paths-list $IMAGE_PATH/.exagear/utmp-list --vpaths-list $IMAGE_PATH/.exagear/vpaths-list --opaths-list $IMAGE_PATH/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- "
EXE="{e7_text.text()}"
NEW_VERSION="6.4.1deepin1"
BOTTLE="$HOME/.deepinwine/{e5_text.text()}"
KUNPENG=`lscpu | grep 'Model name' | grep Kunpeng`
IMG_ARCHIVE_DIR=/opt/deepin-wine-exagear-images/debian-buster
IMAGE_VER="{e2_text.text()}"
LOCALTIME=`readlink -f /etc/localtime`
export LC_ALL=$LANG
export XMODIFIERS=$XMODIFIERS
export DESKTOP_SESSION=deepin
if command -v zenity >/dev/null 2>&1; then
progressbar()
{{
WINDOWID="" zenity --progress --title="$1" --text="$2" --pulsate --width=400 --auto-close --no-cancel ||
WINDOWID="" zenity --progress --title="$1" --text="$2" --pulsate --width=400 --auto-close
}}
else
progressbar()
{{
cat -
}}
fi
reconstruct_bottle_symlink() {{
if [ -L $BOTTLE/drive_c/users/$USER/Desktop ]; then
rm -f $BOTTLE/drive_c/users/$USER/Desktop
ln -s $HOME/Desktop $BOTTLE/drive_c/users/$USER/Desktop
fi
if [ -L $BOTTLE/drive_c/users/$USER/Documents ]; then
rm -f $BOTTLE/drive_c/users/$USER/Documents
ln -s $HOME/Documents $BOTTLE/drive_c/users/$USER/Documents
fi
if [ -L $BOTTLE/drive_c/users/$USER/Downloads ]; then
rm -f $BOTTLE/drive_c/users/$USER/Downloads
ln -s $HOME/Downloads $BOTTLE/drive_c/users/$USER/Downloads
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Documents" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Documents"
ln -s $HOME/Documents "$BOTTLE/drive_c/users/$USER/My Documents"
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Music" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Music"
ln -s $HOME/Music "$BOTTLE/drive_c/users/$USER/My Music"
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Videos" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Videos"
ln -s $HOME/Videos "$BOTTLE/drive_c/users/$USER/My Videos"
fi
}}
extract_image() {{
progpid=$(ps -ef | grep "zenity --progress --title=${{BOTTLE}}" | grep -v grep)
if [ -n "$progpid" ];then
echo "one $BOTTLE app is extracting runtime images too."
exit 0
fi
7z x "$IMG_ARCHIVE_DIR/files.7z" -o"$IMAGE_PATH" -aoa | progressbar "$BOTTLE" "正在释放环境..."
cp /usr/bin/dde-file-manager $IMAGE_PATH/usr/bin/dde-file-manager
rm $IMAGE_PATH/etc/localtime
ln -s $LOCALTIME $IMAGE_PATH/etc/localtime
if [ -d $IMAGE_PATH/etc/resolvconf ];then
rm $IMAGE_PATH/etc/resolvconf
fi
if [ -d /etc/resolvconf ];then
cp /etc/resolvconf $IMAGE_PATH/etc/ -rf
fi
cp /etc/resolv.conf $IMAGE_PATH/etc/
cp /etc/hosts $IMAGE_PATH/etc/
echo $IMAGE_VER > $IMAGE_PATH/VERSION
}}
get_link_err_nums() {{
find $IMAGE_PATH -type l ! -exec test -e {{}} \; -print | wc -l
}}
if [ ! -d "$HOME/.deepinwine" ];then
mkdir -p "$HOME/.deepinwine"
fi
if [ -f $BOTTLE/VERSION ];then
old_version=`cat $BOTTLE/VERSION`
if [ "$old_version" != "$NEW_VERSION" ];then
WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINESERVER -k
rm -rf $BOTTLE
fi
fi
Update_D() {{
if [ -L "$BOTTLE/dosdevices/d:" ]; then
rm -f "$BOTTLE/dosdevices/d:"
ln -s $Downloads "$BOTTLE/dosdevices/d:"
fi
if [ -L "$BOTTLE/dosdevices/d" ]; then
rm -f "$BOTTLE/dosdevices/d"
ln -s $Downloads "$BOTTLE/dosdevices/d"
fi
}}
if [ ! -d $BOTTLE ];then
7z x "$DEB_PATH/files/files.7z" -o"$BOTTLE" -aoa
mv "$BOTTLE/drive_c/users/@current_user@" "$BOTTLE/drive_c/users/$USER"
sed -i "s#@current_user@#$USER#" $BOTTLE/*.reg
reconstruct_bottle_symlink
echo $NEW_VERSION > $BOTTLE/VERSION
fi
if [ ! -z "$KUNPENG" ];then
if [ ! -e $IMAGE_PATH/VERSION ];then
extract_image
fi
OLD_IMAGE_VER=`cat $IMAGE_PATH/VERSION`
if [ "$OLD_IMAGE_VER" != "$IMAGE_VER" ];then
extract_image
fi
echo "======$(get_link_err_nums)===="
if [ "$(get_link_err_nums)" -gt "120" ];then
extract_image
fi
fi
## mount /data/ dir to geust
if [ -d $IMAGE_PATH ] && [ ! -d $IMAGE_PATH/data ];then
mkdir $IMAGE_PATH/data
cp $DEB_PATH/files/exa/vpaths-list $IMAGE_PATH/.exagear
fi
export WINEPREDLL=$DEB_PATH/files/dlls
export ATTACH_FILE_DIALOG=1
export WINEDLLPATH=/opt/deepin-wine6-stable/lib
WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINE $WINE wineboot --init
Update_D
WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINE "$EXE" --disable-gpu &""",
"info": f'''{{
"appid": "{e1_text.text()}",
"name": "{e8_text.text()}",
"version": "{e2_text.text()}",
"arch": ["arm64"],
"permissions": {{
"autostart": false,
"notification": false,
"trayicon": true,
"clipboard": true,
"account": false,
"bluetooth": false,
"camera": true,
"audio_record": true,
"installed_apps": false
}}
}}'''}
]
#############
# 删除文件
#############
self.label.emit("正在删除对构建 deb 包有影响的文件……")
debPackagePath = f"/tmp/{random.randint(0, 9999)}"
self.run_command(f"rm -rfv /tmp/{debPackagePath}")
###############
# 创建目录
###############
self.label.emit("正在创建目录……")
os.makedirs("{}/DEBIAN".format(debPackagePath))
os.makedirs("{}/opt/apps/{}/entries/applications".format(debPackagePath, e1_text.text()))
os.makedirs("{}/opt/apps/{}/entries/icons/hicolor/scalable/apps".format(debPackagePath, e1_text.text()))
os.makedirs("{}/opt/apps/{}/files".format(debPackagePath, e1_text.text()))
###############
# 创建文件
###############
self.label.emit("正在创建文件……")
os.mknod("{}/DEBIAN/control".format(debPackagePath))
os.mknod("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()))
os.mknod("{}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
os.mknod("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()))
###############
# 设置容器
###############
self.label.emit("正在设置 wine 容器")
os.chdir(b)
self.run_command("sed -i \"s#$USER#@current_user@#\" ./*.reg")
os.chdir(f"{b}/drive_c/users")
self.run_command(f"mv -v '{os.getlogin()}' @current_user@")
os.chdir(programPath)
if cleanBottonByUOS.isChecked():
self.run_command(f"WINE='{debInformation[debArch.currentIndex()]['Wine']}' '{programPath}/cleanbottle.sh' '{b}'")
###############
# 压缩容器
###############
self.label.emit("正在打包 wine 容器")
self.run_command("7z a {}/opt/apps/{}/files/files.7z {}/*".format(debPackagePath, e1_text.text(), b))
###############
# 复制图片
###############
self.label.emit("正在复制文件……")
# arm64 box86 需要复制 dlls-arm 目录
if debArch.currentIndex() == 0:
if not os.path.exists(f"{programPath}/dlls"):
self.run_command(f"7z x \"{programPath}/dlls.7z\" -o\"{programPath}\"")
os.remove(f"{programPath}/dlls.7z")
self.run_command(f"cp -rv '{programPath}/dlls' {debPackagePath}/opt/apps/{e1_text.text()}/files/")
elif debArch.currentIndex() == 1:
if not os.path.exists(f"{programPath}/dlls-arm"):
self.run_command(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\"")
os.remove(f"{programPath}/dlls-arm.7z")
if not os.path.exists(f"{programPath}/wined3d.dll.so"):
self.run_command(f"7z x \"{programPath}/wined3d.dll.so.7z\" -o\"{programPath}\"")
os.remove(f"{programPath}/wined3d.dll.so.7z")
self.run_command(f"cp -rv '{programPath}/dlls-arm' {debPackagePath}/opt/apps/{e1_text.text()}/files/dlls")
self.run_command(f"cp -rv '{programPath}/wined3d.dll.so' {debPackagePath}/opt/apps/{e1_text.text()}/files/")
elif debArch.currentIndex() == 2:
if not os.path.exists(f"{programPath}/exagear"):
self.run_command(f"aria2c -x 16 -s 16 -d \"{programPath}\" -o \"exagear.7z\" https://gitlink.org.cn/api/attachments/392441")
self.run_command(f"7z x \"{programPath}/exagear.7z\" -o\"{programPath}\"")
os.remove(f"{programPath}/exagear.7z")
self.run_command(f"cp -rv '{programPath}/exagear/*' {debPackagePath}/opt/apps/{e1_text.text()}/files/")
if e9_text.text() != "":
shutil.copy(e9_text.text(), "{}/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}.{}".format(debPackagePath, e1_text.text(), e1_text.text(), imms))
################
# 获取文件大小
################
self.label.emit("正在计算文件大小……")
size = getFileFolderSize(debPackagePath) / 1024
################
# 写入文本文档
################
self.label.emit("正在写入文件……")
write_txt(f"{debPackagePath}/DEBIAN/control", f'''Package: {e1_text.text()}
Version: {e2_text.text()}
Architecture: {debInformation[debArch.currentIndex()]["Architecture"]}
Maintainer: {e4_text.text()}
Depends: {debInformation[debArch.currentIndex()]["Depends"]}
Section: non-free/otherosfs
Priority: optional
Multi-Arch: foreign
Description: {e3_text.text()}
''')
if debInformation[debArch.currentIndex()]["postinst"] != "":
write_txt(f"{debPackagePath}/DEBIAN/postinst", debInformation[debArch.currentIndex()]["postinst"])
if debInformation[debArch.currentIndex()]["postrm"] != "":
write_txt(f"{debPackagePath}/DEBIAN/postrm", debInformation[debArch.currentIndex()]["postrm"])
write_txt("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()), '#!/usr/bin/env xdg-open\n[Desktop Entry]\nEncoding=UTF-8\nType=Application\nX-Created-By={}\nCategories={};\nIcon={}\nExec="/opt/apps/{}/files/run.sh" {}\nName={}\nComment={}\nMimeType={}\nGenericName={}\nTerminal=false\nStartupNotify=false\n'.format(e4_text.text(), option1_text.currentText(), a, e1_text.text(), e15_text.text(), e8_text.text(), e3_text.text(), e10_text.text(), e1_text.text()))
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run.sh", debInformation[debArch.currentIndex()]["run.sh"])
write_txt("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()), debInformation[debArch.currentIndex()]["info"])
################
# 修改文件权限
################
self.label.emit("正在修改文件权限……")
self.run_command("chmod -Rv 644 {}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
self.run_command("chmod -Rv 644 {}/opt/apps/{}/info".format(debPackagePath, e1_text.text()))
self.run_command("chmod -Rv 0755 {}/DEBIAN".format(debPackagePath))
self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
self.run_command("chmod -Rv 755 {}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()))
################
@ -482,6 +813,18 @@ def readtxt(path):
def get_home():
return os.path.expanduser('~')
def ChangeArchCombobox():
global chooseWineHelperValue
option = True
if debArch.currentIndex() != 0:
option = False
chooseWineHelperValue.setEnabled(option)
wineVersion.setEnabled(option)
#chooseWineHelperValue.setEnabled(option)
rmBash.setEnabled(option)
###############
# 程序信息
###############
@ -530,7 +873,13 @@ button1 = QtWidgets.QPushButton("浏览……")
button2 = QtWidgets.QPushButton("浏览……")
button4 = QtWidgets.QPushButton("浏览……")
button5 = QtWidgets.QPushButton("打包……")
debOption = QtWidgets.QHBoxLayout()
rmBash = QtWidgets.QCheckBox("设置卸载该 deb 后自动删除该容器")
cleanBottonByUOS = QtWidgets.QCheckBox("使用统信 Wine 生态适配活动容器清理脚本")
debOption.addWidget(rmBash)
debOption.addWidget(cleanBottonByUOS)
debArch = QtWidgets.QComboBox()
debArch.addItems(["i386", "arm64(box86)", "arm64(exagear)"])
textbox1 = QtWidgets.QTextBrowser()
option1_text.addItems(["Network", "Chat", "Audio", "Video", "Graphics", "Office", "Translation", "Development", "Utility"])
option1_text.setCurrentText("Network")
@ -541,6 +890,7 @@ button2.clicked.connect(button2_cl)
button4.clicked.connect(button4_cl)
button5.clicked.connect(make_deb)
wineFrame.addWidget(wineVersion)
debArch.currentIndexChanged.connect(ChangeArchCombobox)
wineFrame.addWidget(chooseWineHelperValue)
# 创建控件
widgetLayout.addWidget(QtWidgets.QLabel("要打包的 deb 包的包名(※必填):"), 0, 0, 1, 1)
@ -557,7 +907,8 @@ widgetLayout.addWidget(QtWidgets.QLabel("要显示的 .desktop 文件的图标
widgetLayout.addWidget(QtWidgets.QLabel("要显示的 .desktop 文件的 MimeType 内容(选填):"), 11, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("选择打包的 wine 版本(※必选):"), 12, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("打包 deb 的保存路径(※必填):"), 13, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("自动删除选项(选填):"), 14, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("deb 包选项(选填):"), 14, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("打包 deb 架构(※必选):"), 15, 0, 1, 1)
widgetLayout.addWidget(e1_text, 0, 1, 1, 1)
widgetLayout.addWidget(e2_text, 1, 1, 1, 1)
widgetLayout.addWidget(e3_text, 2, 1, 1, 1)
@ -575,10 +926,11 @@ widgetLayout.addWidget(e10_text, 11, 1, 1, 1)
widgetLayout.addLayout(wineFrame, 12, 1, 1, 1)
widgetLayout.addWidget(e12_text, 13, 1, 1, 1)
widgetLayout.addWidget(button4, 13, 2, 1, 1)
widgetLayout.addWidget(rmBash, 14, 1, 1, 1)
widgetLayout.addWidget(button5, 15, 1, 1, 1)
widgetLayout.addWidget(label13_text, 16, 0, 1, 3)
widgetLayout.addWidget(textbox1, 17, 0, 1, 3)
widgetLayout.addLayout(debOption, 14, 1, 1, 1)
widgetLayout.addWidget(debArch, 15, 1, 1, 1)
widgetLayout.addWidget(button5, 16, 1, 1, 1)
widgetLayout.addWidget(label13_text, 17, 0, 1, 3)
widgetLayout.addWidget(textbox1, 18, 0, 1, 3)
menu = window.menuBar()
programmenu = menu.addMenu("程序")
help = menu.addMenu("帮助")

@ -85,7 +85,7 @@ run = None
def runexebutton(self):
global run
DisableButton(True)
if not CheckProgramIsInstall(wine[o1.currentText()]) and o1.currentText() != "基于 linglong 的 deepin-wine6-stable不推荐" and o1.currentText() != "基于 exagear 的 deepin-wine6-stable" and o1.currentText() != "基于 box86 的 deepin-wine6-stable":
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine是否继续使用这个 wine 运行?") == QtWidgets.QMessageBox.No:
DisableButton(False)
return
@ -148,6 +148,14 @@ class Runexebutton_threading(QtCore.QThread):
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = "--disable-gpu"
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'")
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
if setting["TerminalOpen"]:
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + e2.currentText() + "' " + setting["WineOption"] + "\" --keep-open" + wineUsingOption], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else:
@ -160,7 +168,7 @@ class Runexebutton_threading(QtCore.QThread):
except:
text = ""
self.signal.emit(text)
print(text)
print(text, end="")
if len(findExeHistory) == 0 or findExeHistory[-1] != wineBottonPath:
findExeHistory.append(wineBottonPath) # 将记录写进数组
write_txt(get_home() + "/.config/deepin-wine-runner/FindExeHistory.json", str(json.dumps(ListToDictionary(findExeHistory)))) # 将历史记录的数组转换为字典并写入
@ -208,7 +216,7 @@ def make_desktop_on_launcher():
if combobox1.currentText() == "" or e2.currentText() == "": # 判断文本框是否有内容
QtWidgets.QMessageBox.information(widget, "提示", "没有填写需要使用 exe 应用或保存的文件名")
return
if not CheckProgramIsInstall(wine[o1.currentText()]):
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine是否继续使用这个 wine 写入?") == QtWidgets.QMessageBox.No:
DisableButton(False)
return
@ -229,6 +237,12 @@ def make_desktop_on_launcher():
if not setting["Debug"]:
option += "WINEDEBUG=-all "
wineUsingOption = ""
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = "--disable-gpu"
write_txt(get_home() + "/.local/share/applications/" + combobox1.currentText() + ".desktop", f'''[Desktop Entry]
@ -254,7 +268,7 @@ def make_desktop_on_desktop():
if combobox1.currentText() == "" or e2.currentText() == "": # 判断文本框是否有内容
QtWidgets.QMessageBox.information(widget, "提示", "没有填写需要使用 exe 应用或保存的文件名")
return
if not CheckProgramIsInstall(wine[o1.currentText()]):
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine是否继续使用这个 wine 写入?") == QtWidgets.QMessageBox.No:
DisableButton(False)
return
@ -272,6 +286,12 @@ def make_desktop_on_desktop():
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = "--disable-gpu"
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
if not os.path.exists(get_desktop_path()):
os.makedirs(get_home())
os.mknod(get_desktop_path() + "/" + combobox1.currentText() + ".desktop")
@ -336,6 +356,9 @@ def InstallWine():
def InstallWineOnDeepin23():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e \"{programPath}/InstallWineOnDeepin23.py\""]).start()
def InstallWineHQ():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e \"{programPath}/InstallNewWineHQ.sh\""]).start()
def OpenWineBotton():
if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"]
@ -373,10 +396,18 @@ class RunWineProgramThread(QtCore.QThread):
if not setting["Debug"]:
option += "WINEDEBUG=-all "
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'")
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = "--disable-gpu"
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
if setting["TerminalOpen"]:
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"] + "\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"] + " " + wineUsingOption + "\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else:
res = subprocess.Popen(["WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"]], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# 实时读取程序返回
@ -386,7 +417,7 @@ class RunWineProgramThread(QtCore.QThread):
except:
text = ""
self.signal.emit(text)
print(text)
print(text, end="")
if self.history:
if len(findExeHistory) == 0 or findExeHistory[-1] != wineBottonPath:
findExeHistory.append(wineBottonPath) # 将记录写进数组
@ -404,7 +435,7 @@ def RunWineProgram(wineProgram, history = False, Disbled = True):
global runProgram
DisableButton(True)
if not CheckProgramIsInstall(wine[o1.currentText()]) and o1.currentText() != "基于 linglong 的 deepin-wine6-stable不推荐" and o1.currentText() != "基于 exagear 的 deepin-wine6-stable" and o1.currentText() != "基于 box86 的 deepin-wine6-stable":
if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine是否继续使用这个 wine 运行?") == QtWidgets.QMessageBox.No:
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
DisableButton(False)
return
returnText.setText("")
@ -427,8 +458,17 @@ class RunWinetricksThread(QtCore.QThread):
option += f"WINEARCH={setting['Architecture']} "
if not setting["Debug"]:
option += "WINEDEBUG=-all "
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = "--disable-gpu"
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
if setting["TerminalOpen"]:
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + " winetricks --gui\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + f" winetricks --gui {wineUsingOption}\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else:
res = subprocess.Popen([f"WINEPREFIX='{wineBottonPath}' {option} WINE='" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + "' winetricks --gui"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# 实时读取程序返回
@ -445,21 +485,34 @@ runWinetricks = None
def RunWinetricks():
global runWinetricks
DisableButton(True)
if not CheckProgramIsInstall(wine[o1.currentText()]):
if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine是否继续使用这个 wine 运行?") == QtWidgets.QMessageBox.No:
if not CheckProgramIsInstall(wine[o1.currentText()]) and o1.currentText() != "基于 linglong 的 deepin-wine6-stable不推荐" and o1.currentText() != "基于 exagear 的 deepin-wine6-stable" and o1.currentText() != "基于 box86 的 deepin-wine6-stable":
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
DisableButton(False)
return
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
returnText.setText("")
runWinetricks = RunWinetricksThread()
runWinetricks.signal.connect(QT.ShowWineReturn)
runWinetricks.start()
def CleanWineBottonByUOS():
if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"]
else:
wineBottonPath = e1.currentText()
os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"WINE='{wine[o1.currentText()]}' '{programPath}/cleanbottle.sh' '{wineBottonPath}'; echo 按回车退出; read; read; exit;\"")
def FontAppStore():
if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"]
else:
wineBottonPath = e1.currentText()
os.system(f"'{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallFont.py' '{wineBottonPath}' {int(setting['RuntimeCache'])}")
os.system(f"WINE='{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallFont.py' '{wineBottonPath}' {int(setting['RuntimeCache'])}")
def InstallMonoGecko(program):
if e1.currentText() == "":
@ -490,6 +543,11 @@ def InstallMSXML():
os.system(f"'{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallMsxml.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}")
def InstallDXVK():
if not os.path.exists(f"{programPath}/dxvk"):
if os.system(f"7z x \"{programPath}/dxvk.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dxvk.7z")
if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"]
else:
@ -500,6 +558,11 @@ def InstallDXVK():
f"{programPath}/dxvk/setup_dxvk.sh", "install"])
def UninstallDXVK():
if not os.path.exists(f"{programPath}/dxvk"):
if os.system(f"7z x \"{programPath}/dxvk.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dxvk.7z")
if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"]
else:
@ -610,6 +673,9 @@ def UOSPackageScript():
def RunVM():
threading.Thread(target=os.system, args=[f"bash '{programPath}/RunVM.sh'"]).start()
def CleanProgram():
os.system(f"'{programPath}/launch.sh' deepin-terminal -e \"{programPath}/clean-unuse-program.py\"")
class UpdateWindow():
data = {}
update = None
@ -1004,10 +1070,28 @@ if not os.path.exists(get_home() + "/.config/deepin-wine-runner/WineSetting.json
###########################
# 设置变量
###########################
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
# 如果要添加其他 wine请在字典添加其名称和执行路径
try:
wine = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine6 stable": "deepin-wine6-stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine"}
wine = {
"基于 box86 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ",
"基于 exagear 的 deepin-wine6-stable": f"/opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ",
"deepin-wine6 stable": "deepin-wine6-stable",
"deepin-wine5 stable": "deepin-wine5-stable",
"spark-wine7-devel": "spark-wine7-devel",
"deepin-wine": "deepin-wine",
"deepin-wine5": "deepin-wine5",
"wine": "wine",
"wine64": "wine64",
"ukylin-wine": "ukylin-wine",
"基于 linglong 的 deepin-wine6-stable不推荐": f"ll-cli run '' --exec '/bin/deepin-wine6-stable'"
}
untipsWine = ["基于 box86 的 deepin-wine6-stable", "基于 exagear 的 deepin-wine6-stable", "基于 linglong 的 deepin-wine6-stable不推荐"]
canUseWine = []
if os.path.exists("/opt/deepin-box86/box86"):
canUseWine.append("基于 box86 的 deepin-wine6-stable")
if os.path.exists("/opt/exagear/bin/ubt_x64a64_al"):
canUseWine.append("基于 exagear 的 deepin-wine6-stable")
for i in wine.keys():
if not os.system(f"which '{wine[i]}'"):
canUseWine.append(i)
@ -1022,12 +1106,6 @@ try:
break
except:
pass
if os.path.exists("/opt/deepin-box86/box86"):
wine["基于 box86 的 deepin-wine6-stable"] = f"BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine "
canUseWine.append("基于 box86 的 deepin-wine6-stable")
if os.path.exists("/opt/exagear/bin/ubt_x64a64_al"):
wine["基于 exagear 的 deepin-wine6-stable"] = f"/opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine "
canUseWine.append("基于 exagear 的 deepin-wine6-stable")
shellHistory = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/ShellHistory.json")).values())
findExeHistory = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/FindExeHistory.json")).values())
wineBottonHistory = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineBottonHistory.json")).values())
@ -1050,7 +1128,6 @@ except:
###########################
# 程序信息
###########################
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
iconPath = "{}/deepin-wine-runner.svg".format(programPath)
programUrl = "https://gitee.com/gfdgd-xi/deep-wine-runner\nhttps://github.com/gfdgd-xi/deep-wine-runner\nhttps://www.gitlink.org.cn/gfdgd_xi/deep-wine-runner"
information = json.loads(readtxt(f"{programPath}/information.json"))
@ -1065,26 +1142,30 @@ tips = '''<h4>提示:</h4>
exe路径\' 参数 \'
即可(单引号需要输入)
5、wine 容器如果没有指定,则会默认为 ~/.wine
6、在使用 linglong 包的 Wine 应用时,必须安装至少一个 linglong 的使用 Wine 软件包才会出现该选项,
6、对于非 X86 的用户来说,请不要使用本程序自带的 Wine 安装程序和 Windows 虚拟机安装功能(检测到为非 X86 架构会自动禁用)
7、在使用 linglong 包的 Wine 应用时,必须安装至少一个 linglong 的使用 Wine 软件包才会出现该选项,
而程序识别到的 Wine 是按 linglong 的使用 Wine 软件包名的字母排序第一个的 Wine且生成的容器不在用户目录下而是在容器的用户目录下~/.deepinwine、/tmp、桌面、下载、文档等被映射的目录除外
同理需要运行的 EXE 也必须在被映射的目录内
7、如果是使用 Deepin 23 的 Wine 安装脚本,请切记——安装过程会临时添加 Deepin 20 的 apt 源,不要中断安装以及
8、如果是使用 Deepin 23 的 Wine 安装脚本,请切记——安装过程会临时添加 Deepin 20 的 apt 源,不要中断安装以及
<b>千万不要中断后不删除源的情况下 apt upgrade </b>中断后只需重新打开脚本输入 repair 或者随意安装一个 Wine会自动执行恢复操作即可
以及此脚本安装的 Wine 无法保证 100% 能使用,以及副作用是会提示
<code>N: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构,跳过配置文件 'main/binary-i386/Packages' 的获取。</code>'''
updateThingsString = '''※1、修复了重复路径一直自动重复增加的问题
updateThingsString = '''<b>※1、修复了重复路径一直自动重复增加的问题
※2、修复了两个打包器打包错误的问题非基于生态活动脚本的为 wine 导入错误,基于生态活动脚本的为架构有误导致打包出的 deb 无法打包)
※3、适配了部分非 i386、amd64 架构计算机的 UOS 系统使用的 wine
※3、适配了部分非 i386、amd64 架构计算机的 UOS 系统使用的 wine 并支持打包非 i386、amd64 架构计算机的 UOS 系统使用的 wine 程序 deb 包
※4、支持安装 dxvk遵守 Zlib 开源协议)
5、支持不显示没有安装的 Wine方便用户识别
6、增加字体商店
※5、运行器、打包器包括非基于生态适配活动脚本制作的支持使用 Wine 生态适配活动的容器清理脚本</b>
6、支持不显示没有安装的 Wine方便用户识别
7、增加字体商店
8、修改了 Wine 的顺序使其更加合理
'''
for i in information["Thank"]:
thankText += f"{i}\n"
updateTime = "2022年08月05日"
updateTime = "2022年08月11日"
about = f'''<h1>关于</h1>
<p>一个能让Linux用户更加方便运行Windows应用的程序内置了对wine图形话的支持和各种Wine工具和自制Wine程序打包器、运行库安装工具等等</p>
<p>同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具可以做到只需要用户下载系统镜像并点击安装即可无需顾及虚拟机安装、创建、虚拟机的分区等等</p>
<p>本程序依照 GPLV3 协议开源</p>
<pre>
一个图形化了如下命令的程序(最简单格式)
@ -1261,24 +1342,30 @@ menu = window.menuBar()
programmenu = menu.addMenu("程序(&P)")
p1 = QtWidgets.QAction("安装 wine(&I)")
installWineOnDeepin23 = QtWidgets.QAction("安装 wine(只限Deepin23)")
installWineHQ = QtWidgets.QAction("安装 WineHQ")
p2 = QtWidgets.QAction("设置程序(&S)")
p3 = QtWidgets.QAction("清空软件历史记录(&C)")
cleanCache = QtWidgets.QAction("清空软件缓存")
cleanProgramUnuse = QtWidgets.QAction("删除程序组件")
p4 = QtWidgets.QAction("退出程序(&E)")
programmenu.addAction(p1)
programmenu.addAction(installWineOnDeepin23)
programmenu.addAction(installWineHQ)
programmenu.addSeparator()
programmenu.addAction(p2)
programmenu.addSeparator()
programmenu.addAction(p3)
programmenu.addAction(cleanCache)
programmenu.addAction(cleanProgramUnuse)
programmenu.addSeparator()
programmenu.addAction(p4)
p1.triggered.connect(InstallWine)
installWineOnDeepin23.triggered.connect(InstallWineOnDeepin23)
installWineHQ.triggered.connect(InstallWineHQ)
p2.triggered.connect(ProgramSetting.ShowWindow)
p3.triggered.connect(CleanProgramHistory)
cleanCache.triggered.connect(CleanProgramCache)
cleanProgramUnuse.triggered.connect(CleanProgram)
p4.triggered.connect(window.close)
wineOption = menu.addMenu("Wine(&W)")
@ -1286,6 +1373,7 @@ w1 = QtWidgets.QAction("打开 Wine 容器目录")
w2 = QtWidgets.QAction("安装常见字体")
w3 = QtWidgets.QAction("安装自定义字体")
w4 = QtWidgets.QAction("删除选择的 Wine 容器")
cleanBottonUOS = QtWidgets.QAction("清理 Wine 容器(基于 Wine 适配活动脚本)")
w5 = QtWidgets.QAction("打包 wine 应用")
w6 = QtWidgets.QAction("使用官方 Wine 适配活动的脚本进行打包")
w7 = QtWidgets.QAction("从镜像获取DLL只支持Windows XP、Windows Server 2003官方安装镜像")
@ -1294,6 +1382,7 @@ wineOption.addAction(w1)
wineOption.addAction(w2)
wineOption.addAction(w3)
wineOption.addAction(w4)
wineOption.addAction(cleanBottonUOS)
wineOption.addSeparator()
wineOption.addAction(w5)
wineOption.addAction(w6)
@ -1358,6 +1447,7 @@ w1.triggered.connect(OpenWineBotton)
w2.triggered.connect(InstallWineFont)
w3.triggered.connect(OpenWineFontPath)
w4.triggered.connect(DeleteWineBotton)
cleanBottonUOS.triggered.connect(CleanWineBottonByUOS)
w5.triggered.connect(BuildExeDeb)
w6.triggered.connect(UOSPackageScript)
w7.triggered.connect(GetDllFromWindowsISO.ShowWindow)
@ -1451,6 +1541,24 @@ if setting["AutoWine"]:
o1.addItems(canUseWine)
else:
o1.addItems(wine.keys())
# 禁用被精简掉的控件
for i in [
[[p1, installWineOnDeepin23, installWineHQ], f"{programPath}/InstallWineOnDeepin23.py"],
[[w5], f"{programPath}/deepin-wine-packager.py"],
[[w6], f"{programPath}/deepin-wine-packager-with-script.py"],
[[p1, v1], f"{programPath}/RunVM.sh"]
]:
if not os.path.exists(i[1]):
for x in i[0]:
x.setDisabled(True)
# 有些功能是非 X86 不适用的,需要屏蔽
if subprocess.getoutput("arch").lower() != "x86_64":
p1.setDisabled(True)
installWineOnDeepin23.setDisabled(True)
virtualMachine.setDisabled(True)
v1.setDisabled(True)
installWineHQ.setDisabled(True)
pass
o1.setCurrentText(setting["DefultWine"])
e1.setEditText(setting["DefultBotton"])
e2.setEditText("")

@ -0,0 +1,4 @@
## Generated by deepin-installer
deb https://community-packages.deepin.com/deepin/ apricot main contrib non-free
# Written by deepin-home-appstore-client
deb https://com-store-packages.uniontech.com/appstore deepin appstore

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -1,232 +0,0 @@
#!/usr/bin/env bash
function wait(){
echo Press Enter To Exit
read
}
# default directories
dxvk_lib32=${dxvk_lib32:-"x32"}
dxvk_lib64=${dxvk_lib64:-"x64"}
# figure out where we are
basedir=$(dirname "$(readlink -f $0)")
# figure out which action to perform
action="$1"
case "$action" in
install)
;;
uninstall)
;;
*)
echo "Unrecognized action: $action"
echo "Usage: $0 [install|uninstall] [--without-dxgi] [--with-d3d10] [--symlink]"
wait
exit 1
esac
# process arguments
shift
with_dxgi=true
with_d3d10=false
file_cmd="cp -v"
while (($# > 0)); do
case "$1" in
"--without-dxgi")
with_dxgi=false
;;
"--with-d3d10")
with_d3d10=true
;;
"--symlink")
file_cmd="ln -s -v"
;;
esac
shift
done
# check wine prefix before invoking wine, so that we
# don't accidentally create one if the user screws up
if [ -n "$WINEPREFIX" ] && ! [ -f "$WINEPREFIX/system.reg" ]; then
echo "$WINEPREFIX:"' Not a valid wine prefix.' >&2
wait
exit 1
fi
# find wine executable
export WINEDEBUG=-all
# disable mscoree and mshtml to avoid downloading
# wine gecko and mono
export WINEDLLOVERRIDES="mscoree,mshtml="
# 专门添加,为了可以使用自定义的 wine
wine=$WINE
wine64=$WINE64
wineboot="$WINE wineboot"
if [[ $WINE == "" ]];then
wine="wine"
fi
if [[ $WINE64 == "" ]];then
wine64="wine64"
fi
# $PATH is the way for user to control where wine is located (including custom Wine versions).
# Pure 64-bit Wine (non Wow64) requries skipping 32-bit steps.
# In such case, wine64 and winebooot will be present, but wine binary will be missing,
# however it can be present in other PATHs, so it shouldn't be used, to avoid versions mixing.
wine_path=$(dirname "$(which $wineboot)")
wow64=true
if ! [ -f "$wine_path/$wine" ]; then
wine=$wine64
wow64=false
wineboot="$wine64 wineboot"
fi
# resolve 32-bit and 64-bit system32 path
winever=$($wine --version | grep wine)
if [ -z "$winever" ]; then
echo "$wine:"' Not a wine executable. Check your $wine.' >&2
wait
exit 1
fi
# ensure wine placeholder dlls are recreated
# if they are missing
$wineboot -u
win64_sys_path=$($wine64 winepath -u 'C:\windows\system32' 2> /dev/null)
win64_sys_path="${win64_sys_path/$'\r'/}"
if $wow64; then
win32_sys_path=$($wine winepath -u 'C:\windows\system32' 2> /dev/null)
win32_sys_path="${win32_sys_path/$'\r'/}"
fi
if [ -z "$win32_sys_path" ] && [ -z "$win64_sys_path" ]; then
echo 'Failed to resolve C:\windows\system32.' >&2
wait
exit 1
fi
# create native dll override
overrideDll() {
$wine reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v $1 /d native /f >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "Failed to add override for $1"
wait
exit 1
fi
}
# remove dll override
restoreDll() {
$wine reg delete 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v $1 /f > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Failed to remove override for $1"
fi
}
# copy or link dxvk dll, back up original file
installFile() {
dstfile="${1}/${3}.dll"
srcfile="${basedir}/${2}/${3}.dll"
if [ -f "${srcfile}.so" ]; then
srcfile="${srcfile}.so"
fi
if ! [ -f "${srcfile}" ]; then
echo "${srcfile}: File not found. Skipping." >&2
return 1
fi
if [ -n "$1" ]; then
if [ -f "${dstfile}" ] || [ -h "${dstfile}" ]; then
if ! [ -f "${dstfile}.old" ]; then
mv -v "${dstfile}" "${dstfile}.old"
else
rm -v "${dstfile}"
fi
$file_cmd "${srcfile}" "${dstfile}"
else
echo "${dstfile}: File not found in wine prefix" >&2
return 1
fi
fi
return 0
}
# remove dxvk dll, restore original file
uninstallFile() {
dstfile="${1}/${3}.dll"
srcfile="${basedir}/${2}/${3}.dll"
if [ -f "${srcfile}.so" ]; then
srcfile="${srcfile}.so"
fi
if ! [ -f "${srcfile}" ]; then
echo "${srcfile}: File not found. Skipping." >&2
return 1
fi
if ! [ -f "${dstfile}" ] && ! [ -h "${dstfile}" ]; then
echo "${dstfile}: File not found. Skipping." >&2
return 1
fi
if [ -f "${dstfile}.old" ]; then
rm -v "${dstfile}"
mv -v "${dstfile}.old" "${dstfile}"
return 0
else
return 1
fi
}
install() {
installFile "$win64_sys_path" "$dxvk_lib64" "$1"
inst64_ret="$?"
inst32_ret=-1
if $wow64; then
installFile "$win32_sys_path" "$dxvk_lib32" "$1"
inst32_ret="$?"
fi
if (( ($inst32_ret == 0) || ($inst64_ret == 0) )); then
overrideDll "$1"
fi
}
uninstall() {
uninstallFile "$win64_sys_path" "$dxvk_lib64" "$1"
uninst64_ret="$?"
uninst32_ret=-1
if $wow64; then
uninstallFile "$win32_sys_path" "$dxvk_lib32" "$1"
uninst32_ret="$?"
fi
if (( ($uninst32_ret == 0) || ($uninst64_ret == 0) )); then
restoreDll "$1"
fi
}
# skip dxgi during install if not explicitly
# enabled, but always try to uninstall it
if $with_dxgi || [ "$action" == "uninstall" ]; then
$action dxgi
fi
$action d3d9
if $with_d3d10 || [ "$action" == "uninstall" ]; then
$action d3d10
$action d3d10_1
fi
$action d3d10core
$action d3d11
wait

@ -1,5 +1,5 @@
{
"Version": "1.9.0Alpha3",
"Version": "1.9.0",
"Thank": [
"感谢 @a2035274 @虚幻的早晨 https://bbs.deepin.org/post/238301",
"感谢 @zhangs https://bbs.deepin.org/post/227948",
@ -12,7 +12,11 @@
"感谢 @PossibleVing 提供的新版应用图标",
"感谢 @zhengjl 反馈的 1.7.0 中 .net framrwork 3.5 非离线版安装包的问题以及 1.8.0 重复路径一直自动重复增加的问题",
"感谢 @国川 @刘岐 提供的非 i386、amd64 运行 wine 使用 i386/amd64 可执行文件的教程和脚本",
"感谢 @勇往直前 梦想启航 @189******09 @tfhyl 提供在非 X86 平台的国产 PC 进行测试",
"感谢 @cuisirwork 提供的提供视频教程的建议",
"感谢 @办公助手 提供的非 X86 平台 Wine 运行自定义 exe 应用教程和 deb 包",
"感谢统信在 Wine 生态适配活动中提供的打包脚本",
"也感谢 DXVK 的开发者开发了 DXVK 这个程序项目链接https://github.com/doitsujin/dxvk",
"",
"可以从上面的各种解决方案更好的学习 Wine 生态适配,也可以看 deepin 论坛板块 https://bbs.deepin.org/module/detail/116 进行学习,最后也向各位有进行 Wine 生态适配的大佬进行由衷的感谢!",
"如果上面有遗漏,请向我反馈补充"

@ -0,0 +1 @@
deb [by-hash=force] https://d.store.deepinos.org.cn /

Binary file not shown.

@ -0,0 +1 @@
/opt/apps/deepin-wine-runner/InstallNewWineHQ.sh

@ -61,6 +61,9 @@ def disabled_or_NORMAL_all(choose):
option1_text.setDisabled(choose)
chooseWineHelperValue.setDisabled(choose)
wineVersion.setDisabled(choose)
debArch.setDisabled(choose)
if not choose:
ChangeArchCombobox()
class QT:
thread = None
@ -157,82 +160,17 @@ class make_deb_threading(QtCore.QThread):
disabled_or_NORMAL_all(True)
self.label.emit("容器路径填写错误,无法进行构建 deb 包")
return
#############
# 删除文件
#############
self.label.emit("正在删除对构建 deb 包有影响的文件……")
debPackagePath = f"/tmp/{random.randint(0, 9999)}"
self.run_command(f"rm -rfv /tmp/{debPackagePath}")
###############
# 创建目录
###############
self.label.emit("正在创建目录……")
os.makedirs("{}/DEBIAN".format(debPackagePath))
os.makedirs("{}/opt/apps/{}/entries/applications".format(debPackagePath, e1_text.text()))
os.makedirs("{}/opt/apps/{}/entries/icons/hicolor/scalable/apps".format(debPackagePath, e1_text.text()))
os.makedirs("{}/opt/apps/{}/files".format(debPackagePath, e1_text.text()))
###############
# 创建文件
###############
self.label.emit("正在创建文件……")
os.mknod("{}/DEBIAN/control".format(debPackagePath))
os.mknod("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()))
os.mknod("{}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
os.mknod("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()))
###############
# 设置容器
###############
self.label.emit("正在设置 wine 容器")
os.chdir(b)
self.run_command("sed -i \"s#$USER#@current_user@#\" ./*.reg")
os.chdir(f"{b}/drive_c/users")
self.run_command(f"mv -v '{os.getlogin()}' @current_user@")
os.chdir(programPath)
###############
# 压缩容器
###############
self.label.emit("正在打包 wine 容器")
self.run_command("7z a {}/opt/apps/{}/files/files.7z {}/*".format(debPackagePath, e1_text.text(), b))
###############
# 复制图片
###############
self.label.emit("正在复制文件……")
self.run_command(f"cp -rv '{programPath}/dlls' {debPackagePath}/opt/apps/{e1_text.text()}/files/")
if e9_text.text() != "":
shutil.copy(e9_text.text(), "{}/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}.{}".format(debPackagePath, e1_text.text(), e1_text.text(), imms))
################
# 获取文件大小
################
self.label.emit("正在计算文件大小……")
size = getFileFolderSize(debPackagePath) / 1024
################
# 写入文本文档
################
self.label.emit("正在写入文件……")
if not chooseWineHelperValue.isChecked():
write_txt("{}/DEBIAN/control".format(debPackagePath), '''Package: {}
Version: {}
Architecture: i386
Maintainer: {}
Depends: {}, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei
Section: non-free/otherosfs
Priority: optional
Multi-Arch: foreign
Description: {}
'''.format(e1_text.text(), e2_text.text(), e4_text.text(), wine[wineVersion.currentText()], e3_text.text()))
else:
write_txt("{}/DEBIAN/control".format(debPackagePath), '''Package: {}
Version: {}
Architecture: i386
Maintainer: {}
Depends: {}, spark-dwine-helper (>= 1.6.2), fonts-wqy-microhei, fonts-wqy-zenhei
Section: non-free/otherosfs
Priority: optional
Multi-Arch: foreign
Description: {}
'''.format(e1_text.text(), e2_text.text(), e4_text.text(), wine[wineVersion.currentText()], e3_text.text()))
if rmBash.isChecked():
write_txt("{}/DEBIAN/postrm".format(debPackagePath, e1_text.text()), f'''#!/bin/bash
debInformation = [
{
# I386 wine 打包配置文件
"Wine": wine[wineVersion.currentText()],
"Architecture": "i386",
"Depends": [
f"{wine[wineVersion.currentText()]}, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei",
f"{wine[wineVersion.currentText()]}, spark-dwine-helper (>= 1.6.2), fonts-wqy-microhei, fonts-wqy-zenhei"
][int(chooseWineHelperValue.isChecked())],
"postinst": "",
"postrm": ["", f"""#!/bin/bash
if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
@ -247,11 +185,9 @@ fi
done
else
echo"非卸载,跳过清理"
fi
''')
write_txt("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()), '#!/usr/bin/env xdg-open\n[Desktop Entry]\nEncoding=UTF-8\nType=Application\nX-Created-By={}\nCategories={};\nIcon={}\nExec="/opt/apps/{}/files/run.sh" {}\nName={}\nComment={}\nMimeType={}\nGenericName={}\nTerminal=false\nStartupNotify=false\n'.format(e4_text.text(), option1_text.currentText(), a, e1_text.text(), e15_text.text(), e8_text.text(), e3_text.text(), e10_text.text(), e1_text.text()))
if not bool(chooseWineHelperValue.text()):
write_txt("{}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()), '''#!/bin/sh
fi"""][int()],
"run.sh": [
f"""#!/bin/sh
# Copyright (C) 2016 Deepin, Inc.
#
@ -260,13 +196,13 @@ fi
version_gt() {{ test "$(echo "$@" | tr " " "\\n" | sort -V | head -n 1)" != "$1"; }}
BOTTLENAME="{}"
APPVER="{}"
EXEC_PATH="{}"
BOTTLENAME="{e5_text.text()}"
APPVER="{e2_text.text()}"
EXEC_PATH="{e7_text.text()}"
START_SHELL_PATH="/opt/deepinwine/tools/run_v4.sh"
export MIME_TYPE=""
export DEB_PACKAGE_NAME="{}"
export APPRUN_CMD="{}"
export DEB_PACKAGE_NAME="{e1_text.text()}"
export APPRUN_CMD="{wine[wineVersion.currentText()]}"
DISABLE_ATTACH_FILE_DIALOG=""
EXPORT_ENVS=""
@ -294,10 +230,8 @@ if [ -n "$EXEC_PATH" ];then
fi
else
$START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@"
fi
'''.format(e5_text.text(), e2_text.text(), e7_text.text(), e1_text.text(), wine[wineVersion.currentText()]))
else:
write_txt("{}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()), '''#!/bin/sh
fi""",
f"""#!/bin/sh
# Copyright (C) 2016 Deepin, Inc.
#
@ -333,16 +267,16 @@ Get_Dist_Name()
version_gt() {{ test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }}
####用于比较版本?未实装
BOTTLENAME="{}"
APPVER="{}"
EXEC_PATH="{}"
BOTTLENAME="{e5_text.text()}"
APPVER="{e2_text.text()}"
EXEC_PATH="{e7_text.text()}"
##### 软件在wine中的启动路径
START_SHELL_PATH="/opt/deepinwine/tools/spark_run_v4.sh"
export MIME_TYPE=""
#####没什么用
export DEB_PACKAGE_NAME="{}"
export DEB_PACKAGE_NAME="{e1_text.text()}"
####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关
export APPRUN_CMD="{}"
export APPRUN_CMD="{wine[wineVersion.currentText()]}"
#####wine启动指令建议
EXPORT_ENVS=""
@ -403,15 +337,412 @@ if [ -n "$EXEC_PATH" ];then
fi
else
$START_SHELL_PATH $BOTTLENAME $APPVER "uninstaller.exe" "$@"
fi"""
][chooseWineHelperValue.isChecked()],
"info": f'''{{
"appid": "{e1_text.text()}",
"name": "{e8_text.text()}",
"version": "{e2_text.text()}",
"arch": ["i386"],
"permissions": {{
"autostart": false,
"notification": false,
"trayicon": true,
"clipboard": true,
"account": false,
"bluetooth": false,
"camera": true,
"audio_record": true,
"installed_apps": false
}}
}}'''
},
{
# ARM64 BOX86 wine 打包配置文件
"Wine": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ",
"Architecture": "arm64",
"Depends": "deepin-elf-verify (>= 0.0.16.7-1), com.deepin-wine6-stable.deepin(>=6.0deepin14), com.deepin-box86.deepin(>=0.2.3deepin8), p7zip-full, fonts-wqy-microhei, fonts-noto-cjk",
"postinst": f"""#!/bin/sh
DEB_PATH=/opt/apps/{e1_text.text()}
NVIDIA_DISP_CARD=`lspci | grep VGA | grep NVIDIA`
if [ -f $DEB_PATH/files/wined3d.dll.so ] && [ ! -z "$NVIDIA_DISP_CARD" ];then
mv $DEB_PATH/files/wined3d.dll.so $DEB_PATH/files/dlls
fi
'''.format(e5_text.text(), e2_text.text(), e7_text.text(), e1_text.text(), wine[wineVersion.currentText()]))
write_txt("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()), '{\n "appid": "' + e1_text.text() + '",\n "name": "' + e8_text.text() + '",\n "version": "' + e2_text.text() + '",\n "arch": ["i386"],\n "permissions": {\n "autostart": false,\n "notification": false,\n "trayicon": true,\n "clipboard": true,\n "account": false,\n "bluetooth": false,\n "camera": false,\n "audio_record": false,\n "installed_apps": false\n }\n}')
true
""",
"postrm": f"""#!/bin/sh
BOTTLE="$HOME/.deepinwine/{e5_text.text()}"
WINESERVER=/opt/deepin-wine6-stable/bin/wineserver
if [ -d "$BOTTLE" ];then
WINEPREFIX=$BOTTLE $WINESERVER -k
rm $BOTTLE -rf
fi
true""",
"run.sh": f"""#!/bin/bash
DEB_PATH="/opt/apps/{e1_text.text()}"
WINE="/opt/deepin-wine6-stable/bin/wine"
WINESERVER="/opt/deepin-wine6-stable/bin/wineserver"
BOX86="/opt/deepin-box86/box86"
EXE="{e7_text.text()}"
NEW_VERSION="{e2_text.text()}"
BOTTLE="$HOME/.deepinwine/{e5_text.text()}"
reconstruct_bottle_symlink() {{
if [ -L $BOTTLE/drive_c/users/$USER/Desktop ]; then
rm -f $BOTTLE/drive_c/users/$USER/Desktop
ln -s $HOME/Desktop $BOTTLE/drive_c/users/$USER/Desktop
fi
if [ -L $BOTTLE/drive_c/users/$USER/Documents ]; then
rm -f $BOTTLE/drive_c/users/$USER/Documents
ln -s $HOME/Documents $BOTTLE/drive_c/users/$USER/Documents
fi
if [ -L $BOTTLE/drive_c/users/$USER/Downloads ]; then
rm -f $BOTTLE/drive_c/users/$USER/Downloads
ln -s $HOME/Downloads $BOTTLE/drive_c/users/$USER/Downloads
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Documents" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Documents"
ln -s $HOME/Documents "$BOTTLE/drive_c/users/$USER/My Documents"
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Music" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Music"
ln -s $HOME/Music "$BOTTLE/drive_c/users/$USER/My Music"
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Videos" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Videos"
ln -s $HOME/Videos "$BOTTLE/drive_c/users/$USER/My Videos"
fi
}}
if [ ! -d "$HOME/.deepinwine" ];then
mkdir -p "$HOME/.deepinwine"
fi
if [ -f $BOTTLE/VERSION ];then
old_version=""
while read line; do
old_version=$line
done < $BOTTLE/VERSION
if [ "$old_version" != "$NEW_VERSION" ];then
WINEPREFIX=$BOTTLE $BOX86 $WINESERVER -k
rm -rf $BOTTLE
fi
fi
if [ -d $BOTTLE ] && [ ! -f $BOTTLE/VERSION ];then
WINEPREFIX=$BOTTLE $BOX86 $WINESERVER -k
rm -rf $BOTTLE
fi
if [ ! -d $BOTTLE ];then
7z x "$DEB_PATH/files/files.7z" -o"$BOTTLE" -aoa
mv "$BOTTLE/drive_c/users/@current_user@" "$BOTTLE/drive_c/users/$USER"
sed -i "s#@current_user@#$USER#" $BOTTLE/*.reg
reconstruct_bottle_symlink
echo $NEW_VERSION > $BOTTLE/VERSION
fi
export WINEPREDLL=$DEB_PATH/files/dlls
export ATTACH_FILE_DIALOG=1
export WINEDLLPATH=/opt/deepin-wine6-stable/lib
WINEPREFIX=$BOTTLE $BOX86 $WINE "$EXE" &""",
"info": f'''{{
"appid": "{e1_text.text()}",
"name": "{e8_text.text()}",
"version": "{e2_text.text()}",
"arch": ["arm64"],
"permissions": {{
"autostart": false,
"notification": false,
"trayicon": true,
"clipboard": true,
"account": false,
"bluetooth": false,
"camera": true,
"audio_record": true,
"installed_apps": false
}}
}}'''
},
{
# ARM64 exagear wine 打包配置文件
"Wine": f"/opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ",
"Architecture": "arm64",
"Depends": "zenity, com.deepin-wine6-stable.deepin(>=6.0deepin14), deepin-wine-exagear-images(>=10deepin4), com.deepin-box86.deepin(>=0.2.3deepin9), p7zip-full, fonts-wqy-microhei, fonts-noto-cjk",
"postinst": "",
"postrm": "",
"run.sh": f"""#!/bin/bash
DEB_PATH="/opt/apps/{e1_text.text()}"
WINE="/opt/deepin-wine6-stable/bin/wine"
WINESERVER="/opt/deepin-wine6-stable/bin/wineserver"
EMU="/opt/exagear/bin/ubt_x64a64_al"
IMAGE_PATH=$HOME/.deepinwine/debian-buster
EMU_ARGS="--path-prefix $IMAGE_PATH --utmp-paths-list $IMAGE_PATH/.exagear/utmp-list --vpaths-list $IMAGE_PATH/.exagear/vpaths-list --opaths-list $IMAGE_PATH/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- "
EXE="{e7_text.text()}"
NEW_VERSION="6.4.1deepin1"
BOTTLE="$HOME/.deepinwine/{e5_text.text()}"
KUNPENG=`lscpu | grep 'Model name' | grep Kunpeng`
IMG_ARCHIVE_DIR=/opt/deepin-wine-exagear-images/debian-buster
IMAGE_VER="{e2_text.text()}"
LOCALTIME=`readlink -f /etc/localtime`
export LC_ALL=$LANG
export XMODIFIERS=$XMODIFIERS
export DESKTOP_SESSION=deepin
if command -v zenity >/dev/null 2>&1; then
progressbar()
{{
WINDOWID="" zenity --progress --title="$1" --text="$2" --pulsate --width=400 --auto-close --no-cancel ||
WINDOWID="" zenity --progress --title="$1" --text="$2" --pulsate --width=400 --auto-close
}}
else
progressbar()
{{
cat -
}}
fi
reconstruct_bottle_symlink() {{
if [ -L $BOTTLE/drive_c/users/$USER/Desktop ]; then
rm -f $BOTTLE/drive_c/users/$USER/Desktop
ln -s $HOME/Desktop $BOTTLE/drive_c/users/$USER/Desktop
fi
if [ -L $BOTTLE/drive_c/users/$USER/Documents ]; then
rm -f $BOTTLE/drive_c/users/$USER/Documents
ln -s $HOME/Documents $BOTTLE/drive_c/users/$USER/Documents
fi
if [ -L $BOTTLE/drive_c/users/$USER/Downloads ]; then
rm -f $BOTTLE/drive_c/users/$USER/Downloads
ln -s $HOME/Downloads $BOTTLE/drive_c/users/$USER/Downloads
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Documents" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Documents"
ln -s $HOME/Documents "$BOTTLE/drive_c/users/$USER/My Documents"
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Music" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Music"
ln -s $HOME/Music "$BOTTLE/drive_c/users/$USER/My Music"
fi
if [ -L "$BOTTLE/drive_c/users/$USER/My Videos" ]; then
rm -f "$BOTTLE/drive_c/users/$USER/My Videos"
ln -s $HOME/Videos "$BOTTLE/drive_c/users/$USER/My Videos"
fi
}}
extract_image() {{
progpid=$(ps -ef | grep "zenity --progress --title=${{BOTTLE}}" | grep -v grep)
if [ -n "$progpid" ];then
echo "one $BOTTLE app is extracting runtime images too."
exit 0
fi
7z x "$IMG_ARCHIVE_DIR/files.7z" -o"$IMAGE_PATH" -aoa | progressbar "$BOTTLE" "正在释放环境..."
cp /usr/bin/dde-file-manager $IMAGE_PATH/usr/bin/dde-file-manager
rm $IMAGE_PATH/etc/localtime
ln -s $LOCALTIME $IMAGE_PATH/etc/localtime
if [ -d $IMAGE_PATH/etc/resolvconf ];then
rm $IMAGE_PATH/etc/resolvconf
fi
if [ -d /etc/resolvconf ];then
cp /etc/resolvconf $IMAGE_PATH/etc/ -rf
fi
cp /etc/resolv.conf $IMAGE_PATH/etc/
cp /etc/hosts $IMAGE_PATH/etc/
echo $IMAGE_VER > $IMAGE_PATH/VERSION
}}
get_link_err_nums() {{
find $IMAGE_PATH -type l ! -exec test -e {{}} \; -print | wc -l
}}
if [ ! -d "$HOME/.deepinwine" ];then
mkdir -p "$HOME/.deepinwine"
fi
if [ -f $BOTTLE/VERSION ];then
old_version=`cat $BOTTLE/VERSION`
if [ "$old_version" != "$NEW_VERSION" ];then
WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINESERVER -k
rm -rf $BOTTLE
fi
fi
Update_D() {{
if [ -L "$BOTTLE/dosdevices/d:" ]; then
rm -f "$BOTTLE/dosdevices/d:"
ln -s $Downloads "$BOTTLE/dosdevices/d:"
fi
if [ -L "$BOTTLE/dosdevices/d" ]; then
rm -f "$BOTTLE/dosdevices/d"
ln -s $Downloads "$BOTTLE/dosdevices/d"
fi
}}
if [ ! -d $BOTTLE ];then
7z x "$DEB_PATH/files/files.7z" -o"$BOTTLE" -aoa
mv "$BOTTLE/drive_c/users/@current_user@" "$BOTTLE/drive_c/users/$USER"
sed -i "s#@current_user@#$USER#" $BOTTLE/*.reg
reconstruct_bottle_symlink
echo $NEW_VERSION > $BOTTLE/VERSION
fi
if [ ! -z "$KUNPENG" ];then
if [ ! -e $IMAGE_PATH/VERSION ];then
extract_image
fi
OLD_IMAGE_VER=`cat $IMAGE_PATH/VERSION`
if [ "$OLD_IMAGE_VER" != "$IMAGE_VER" ];then
extract_image
fi
echo "======$(get_link_err_nums)===="
if [ "$(get_link_err_nums)" -gt "120" ];then
extract_image
fi
fi
## mount /data/ dir to geust
if [ -d $IMAGE_PATH ] && [ ! -d $IMAGE_PATH/data ];then
mkdir $IMAGE_PATH/data
cp $DEB_PATH/files/exa/vpaths-list $IMAGE_PATH/.exagear
fi
export WINEPREDLL=$DEB_PATH/files/dlls
export ATTACH_FILE_DIALOG=1
export WINEDLLPATH=/opt/deepin-wine6-stable/lib
WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINE $WINE wineboot --init
Update_D
WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINE "$EXE" --disable-gpu &""",
"info": f'''{{
"appid": "{e1_text.text()}",
"name": "{e8_text.text()}",
"version": "{e2_text.text()}",
"arch": ["arm64"],
"permissions": {{
"autostart": false,
"notification": false,
"trayicon": true,
"clipboard": true,
"account": false,
"bluetooth": false,
"camera": true,
"audio_record": true,
"installed_apps": false
}}
}}'''}
]
#############
# 删除文件
#############
self.label.emit("正在删除对构建 deb 包有影响的文件……")
debPackagePath = f"/tmp/{random.randint(0, 9999)}"
self.run_command(f"rm -rfv /tmp/{debPackagePath}")
###############
# 创建目录
###############
self.label.emit("正在创建目录……")
os.makedirs("{}/DEBIAN".format(debPackagePath))
os.makedirs("{}/opt/apps/{}/entries/applications".format(debPackagePath, e1_text.text()))
os.makedirs("{}/opt/apps/{}/entries/icons/hicolor/scalable/apps".format(debPackagePath, e1_text.text()))
os.makedirs("{}/opt/apps/{}/files".format(debPackagePath, e1_text.text()))
###############
# 创建文件
###############
self.label.emit("正在创建文件……")
os.mknod("{}/DEBIAN/control".format(debPackagePath))
os.mknod("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()))
os.mknod("{}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
os.mknod("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()))
###############
# 设置容器
###############
self.label.emit("正在设置 wine 容器")
os.chdir(b)
self.run_command("sed -i \"s#$USER#@current_user@#\" ./*.reg")
os.chdir(f"{b}/drive_c/users")
self.run_command(f"mv -v '{os.getlogin()}' @current_user@")
os.chdir(programPath)
if cleanBottonByUOS.isChecked():
self.run_command(f"WINE='{debInformation[debArch.currentIndex()]['Wine']}' '{programPath}/cleanbottle.sh' '{b}'")
###############
# 压缩容器
###############
self.label.emit("正在打包 wine 容器")
self.run_command("7z a {}/opt/apps/{}/files/files.7z {}/*".format(debPackagePath, e1_text.text(), b))
###############
# 复制图片
###############
self.label.emit("正在复制文件……")
# arm64 box86 需要复制 dlls-arm 目录
if debArch.currentIndex() == 0:
if not os.path.exists(f"{programPath}/dlls"):
self.run_command(f"7z x \"{programPath}/dlls.7z\" -o\"{programPath}\"")
os.remove(f"{programPath}/dlls.7z")
self.run_command(f"cp -rv '{programPath}/dlls' {debPackagePath}/opt/apps/{e1_text.text()}/files/")
elif debArch.currentIndex() == 1:
if not os.path.exists(f"{programPath}/dlls-arm"):
self.run_command(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\"")
os.remove(f"{programPath}/dlls-arm.7z")
if not os.path.exists(f"{programPath}/wined3d.dll.so"):
self.run_command(f"7z x \"{programPath}/wined3d.dll.so.7z\" -o\"{programPath}\"")
os.remove(f"{programPath}/wined3d.dll.so.7z")
self.run_command(f"cp -rv '{programPath}/dlls-arm' {debPackagePath}/opt/apps/{e1_text.text()}/files/dlls")
self.run_command(f"cp -rv '{programPath}/wined3d.dll.so' {debPackagePath}/opt/apps/{e1_text.text()}/files/")
elif debArch.currentIndex() == 2:
if not os.path.exists(f"{programPath}/exagear"):
self.run_command(f"aria2c -x 16 -s 16 -d \"{programPath}\" -o \"exagear.7z\" https://gitlink.org.cn/api/attachments/392441")
self.run_command(f"7z x \"{programPath}/exagear.7z\" -o\"{programPath}\"")
os.remove(f"{programPath}/exagear.7z")
self.run_command(f"cp -rv '{programPath}/exagear/*' {debPackagePath}/opt/apps/{e1_text.text()}/files/")
if e9_text.text() != "":
shutil.copy(e9_text.text(), "{}/opt/apps/{}/entries/icons/hicolor/scalable/apps/{}.{}".format(debPackagePath, e1_text.text(), e1_text.text(), imms))
################
# 获取文件大小
################
self.label.emit("正在计算文件大小……")
size = getFileFolderSize(debPackagePath) / 1024
################
# 写入文本文档
################
self.label.emit("正在写入文件……")
write_txt(f"{debPackagePath}/DEBIAN/control", f'''Package: {e1_text.text()}
Version: {e2_text.text()}
Architecture: {debInformation[debArch.currentIndex()]["Architecture"]}
Maintainer: {e4_text.text()}
Depends: {debInformation[debArch.currentIndex()]["Depends"]}
Section: non-free/otherosfs
Priority: optional
Multi-Arch: foreign
Description: {e3_text.text()}
''')
if debInformation[debArch.currentIndex()]["postinst"] != "":
write_txt(f"{debPackagePath}/DEBIAN/postinst", debInformation[debArch.currentIndex()]["postinst"])
if debInformation[debArch.currentIndex()]["postrm"] != "":
write_txt(f"{debPackagePath}/DEBIAN/postrm", debInformation[debArch.currentIndex()]["postrm"])
write_txt("{}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()), '#!/usr/bin/env xdg-open\n[Desktop Entry]\nEncoding=UTF-8\nType=Application\nX-Created-By={}\nCategories={};\nIcon={}\nExec="/opt/apps/{}/files/run.sh" {}\nName={}\nComment={}\nMimeType={}\nGenericName={}\nTerminal=false\nStartupNotify=false\n'.format(e4_text.text(), option1_text.currentText(), a, e1_text.text(), e15_text.text(), e8_text.text(), e3_text.text(), e10_text.text(), e1_text.text()))
write_txt(f"{debPackagePath}/opt/apps/{e1_text.text()}/files/run.sh", debInformation[debArch.currentIndex()]["run.sh"])
write_txt("{}/opt/apps/{}/info".format(debPackagePath, e1_text.text()), debInformation[debArch.currentIndex()]["info"])
################
# 修改文件权限
################
self.label.emit("正在修改文件权限……")
self.run_command("chmod -Rv 644 {}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
self.run_command("chmod -Rv 644 {}/opt/apps/{}/info".format(debPackagePath, e1_text.text()))
self.run_command("chmod -Rv 0755 {}/DEBIAN".format(debPackagePath))
self.run_command("chmod -Rv 755 {}/opt/apps/{}/files/run.sh".format(debPackagePath, e1_text.text()))
self.run_command("chmod -Rv 755 {}/opt/apps/{}/entries/applications/{}.desktop".format(debPackagePath, e1_text.text(), e1_text.text()))
################
@ -482,6 +813,18 @@ def readtxt(path):
def get_home():
return os.path.expanduser('~')
def ChangeArchCombobox():
global chooseWineHelperValue
option = True
if debArch.currentIndex() != 0:
option = False
chooseWineHelperValue.setEnabled(option)
wineVersion.setEnabled(option)
#chooseWineHelperValue.setEnabled(option)
rmBash.setEnabled(option)
###############
# 程序信息
###############
@ -530,7 +873,13 @@ button1 = QtWidgets.QPushButton("浏览……")
button2 = QtWidgets.QPushButton("浏览……")
button4 = QtWidgets.QPushButton("浏览……")
button5 = QtWidgets.QPushButton("打包……")
debOption = QtWidgets.QHBoxLayout()
rmBash = QtWidgets.QCheckBox("设置卸载该 deb 后自动删除该容器")
cleanBottonByUOS = QtWidgets.QCheckBox("使用统信 Wine 生态适配活动容器清理脚本")
debOption.addWidget(rmBash)
debOption.addWidget(cleanBottonByUOS)
debArch = QtWidgets.QComboBox()
debArch.addItems(["i386", "arm64(box86)", "arm64(exagear)"])
textbox1 = QtWidgets.QTextBrowser()
option1_text.addItems(["Network", "Chat", "Audio", "Video", "Graphics", "Office", "Translation", "Development", "Utility"])
option1_text.setCurrentText("Network")
@ -541,6 +890,7 @@ button2.clicked.connect(button2_cl)
button4.clicked.connect(button4_cl)
button5.clicked.connect(make_deb)
wineFrame.addWidget(wineVersion)
debArch.currentIndexChanged.connect(ChangeArchCombobox)
wineFrame.addWidget(chooseWineHelperValue)
# 创建控件
widgetLayout.addWidget(QtWidgets.QLabel("要打包的 deb 包的包名(※必填):"), 0, 0, 1, 1)
@ -557,7 +907,8 @@ widgetLayout.addWidget(QtWidgets.QLabel("要显示的 .desktop 文件的图标
widgetLayout.addWidget(QtWidgets.QLabel("要显示的 .desktop 文件的 MimeType 内容(选填):"), 11, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("选择打包的 wine 版本(※必选):"), 12, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("打包 deb 的保存路径(※必填):"), 13, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("自动删除选项(选填):"), 14, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("deb 包选项(选填):"), 14, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("打包 deb 架构(※必选):"), 15, 0, 1, 1)
widgetLayout.addWidget(e1_text, 0, 1, 1, 1)
widgetLayout.addWidget(e2_text, 1, 1, 1, 1)
widgetLayout.addWidget(e3_text, 2, 1, 1, 1)
@ -575,10 +926,11 @@ widgetLayout.addWidget(e10_text, 11, 1, 1, 1)
widgetLayout.addLayout(wineFrame, 12, 1, 1, 1)
widgetLayout.addWidget(e12_text, 13, 1, 1, 1)
widgetLayout.addWidget(button4, 13, 2, 1, 1)
widgetLayout.addWidget(rmBash, 14, 1, 1, 1)
widgetLayout.addWidget(button5, 15, 1, 1, 1)
widgetLayout.addWidget(label13_text, 16, 0, 1, 3)
widgetLayout.addWidget(textbox1, 17, 0, 1, 3)
widgetLayout.addLayout(debOption, 14, 1, 1, 1)
widgetLayout.addWidget(debArch, 15, 1, 1, 1)
widgetLayout.addWidget(button5, 16, 1, 1, 1)
widgetLayout.addWidget(label13_text, 17, 0, 1, 3)
widgetLayout.addWidget(textbox1, 18, 0, 1, 3)
menu = window.menuBar()
programmenu = menu.addMenu("程序")
help = menu.addMenu("帮助")

@ -0,0 +1,52 @@
#!/usr/bin/env python3
import os
import sys
import threading
import PyQt5.QtGui as QtGui
import PyQt5.QtWidgets as QtWidgets
def Create():
# 解压容器
# 这里参考了 deepin wine 的 run_v4.sh
os.system(f"mkdir -p \"{sys.argv[1]}\"")
os.system(f"7z x \"{programPath}/files-exagear.7z\" -o\"{sys.argv[1]}\"")
os.system(f"mv \"{sys.argv[1]}/drive_c/users/@current_user@\" \"{sys.argv[1]}/drive_c/users/$USER\"")
os.system(f"sed -i \"s#@current_user@#$USER#\" {sys.argv[1]}/*.reg")
window.close()
def Download():
os.system(f"aria2c -x 16 -s 16 -d \"{programPath}\" -o files-exagear.7z https://www.gitlink.org.cn/api/attachments/392364")
window.close()
if __name__ == "__main__":
if len(sys.argv) <= 1 or "--help" in sys.argv:
print("帮助:")
print("参数为要解压到的路径")
print("--help 查看帮助")
sys.exit(1)
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
if os.path.exists(sys.argv[1]):
exit()
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
widget = QtWidgets.QWidget()
layout = QtWidgets.QHBoxLayout()
label = QtWidgets.QLabel("正在下载容器,请稍后……")
layout.addWidget(QtWidgets.QLabel(f"<img src=\"{programPath}/deepin-wine-runner.svg\" width=50>"))
layout.addWidget(label)
widget.setLayout(layout)
window.setCentralWidget(widget)
window.setWindowTitle("下载容器")
window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg"))
# 下载容器
if not os.path.exists(f"{programPath}/files-exagear.7z"):
window.setWindowTitle("下载容器")
label.setText("正在下载容器,请稍后……")
window.show()
threading.Thread(target=Download).start()
app.exec_()
window.setWindowTitle(f"解压容器 {sys.argv[1]}")
label.setText(f"正在解压容器,请稍后……\n容器路径:{sys.argv[1]}")
window.show()
threading.Thread(target=Create).start()
app.exec_()

BIN
dlls-arm.7z Normal file

Binary file not shown.

BIN
dlls.7z Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
dxvk.7z Normal file

Binary file not shown.

@ -1,232 +0,0 @@
#!/usr/bin/env bash
function wait(){
echo Press Enter To Exit
read
}
# default directories
dxvk_lib32=${dxvk_lib32:-"x32"}
dxvk_lib64=${dxvk_lib64:-"x64"}
# figure out where we are
basedir=$(dirname "$(readlink -f $0)")
# figure out which action to perform
action="$1"
case "$action" in
install)
;;
uninstall)
;;
*)
echo "Unrecognized action: $action"
echo "Usage: $0 [install|uninstall] [--without-dxgi] [--with-d3d10] [--symlink]"
wait
exit 1
esac
# process arguments
shift
with_dxgi=true
with_d3d10=false
file_cmd="cp -v"
while (($# > 0)); do
case "$1" in
"--without-dxgi")
with_dxgi=false
;;
"--with-d3d10")
with_d3d10=true
;;
"--symlink")
file_cmd="ln -s -v"
;;
esac
shift
done
# check wine prefix before invoking wine, so that we
# don't accidentally create one if the user screws up
if [ -n "$WINEPREFIX" ] && ! [ -f "$WINEPREFIX/system.reg" ]; then
echo "$WINEPREFIX:"' Not a valid wine prefix.' >&2
wait
exit 1
fi
# find wine executable
export WINEDEBUG=-all
# disable mscoree and mshtml to avoid downloading
# wine gecko and mono
export WINEDLLOVERRIDES="mscoree,mshtml="
# 专门添加,为了可以使用自定义的 wine
wine=$WINE
wine64=$WINE64
wineboot="$WINE wineboot"
if [[ $WINE == "" ]];then
wine="wine"
fi
if [[ $WINE64 == "" ]];then
wine64="wine64"
fi
# $PATH is the way for user to control where wine is located (including custom Wine versions).
# Pure 64-bit Wine (non Wow64) requries skipping 32-bit steps.
# In such case, wine64 and winebooot will be present, but wine binary will be missing,
# however it can be present in other PATHs, so it shouldn't be used, to avoid versions mixing.
wine_path=$(dirname "$(which $wineboot)")
wow64=true
if ! [ -f "$wine_path/$wine" ]; then
wine=$wine64
wow64=false
wineboot="$wine64 wineboot"
fi
# resolve 32-bit and 64-bit system32 path
winever=$($wine --version | grep wine)
if [ -z "$winever" ]; then
echo "$wine:"' Not a wine executable. Check your $wine.' >&2
wait
exit 1
fi
# ensure wine placeholder dlls are recreated
# if they are missing
$wineboot -u
win64_sys_path=$($wine64 winepath -u 'C:\windows\system32' 2> /dev/null)
win64_sys_path="${win64_sys_path/$'\r'/}"
if $wow64; then
win32_sys_path=$($wine winepath -u 'C:\windows\system32' 2> /dev/null)
win32_sys_path="${win32_sys_path/$'\r'/}"
fi
if [ -z "$win32_sys_path" ] && [ -z "$win64_sys_path" ]; then
echo 'Failed to resolve C:\windows\system32.' >&2
wait
exit 1
fi
# create native dll override
overrideDll() {
$wine reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v $1 /d native /f >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "Failed to add override for $1"
wait
exit 1
fi
}
# remove dll override
restoreDll() {
$wine reg delete 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v $1 /f > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Failed to remove override for $1"
fi
}
# copy or link dxvk dll, back up original file
installFile() {
dstfile="${1}/${3}.dll"
srcfile="${basedir}/${2}/${3}.dll"
if [ -f "${srcfile}.so" ]; then
srcfile="${srcfile}.so"
fi
if ! [ -f "${srcfile}" ]; then
echo "${srcfile}: File not found. Skipping." >&2
return 1
fi
if [ -n "$1" ]; then
if [ -f "${dstfile}" ] || [ -h "${dstfile}" ]; then
if ! [ -f "${dstfile}.old" ]; then
mv -v "${dstfile}" "${dstfile}.old"
else
rm -v "${dstfile}"
fi
$file_cmd "${srcfile}" "${dstfile}"
else
echo "${dstfile}: File not found in wine prefix" >&2
return 1
fi
fi
return 0
}
# remove dxvk dll, restore original file
uninstallFile() {
dstfile="${1}/${3}.dll"
srcfile="${basedir}/${2}/${3}.dll"
if [ -f "${srcfile}.so" ]; then
srcfile="${srcfile}.so"
fi
if ! [ -f "${srcfile}" ]; then
echo "${srcfile}: File not found. Skipping." >&2
return 1
fi
if ! [ -f "${dstfile}" ] && ! [ -h "${dstfile}" ]; then
echo "${dstfile}: File not found. Skipping." >&2
return 1
fi
if [ -f "${dstfile}.old" ]; then
rm -v "${dstfile}"
mv -v "${dstfile}.old" "${dstfile}"
return 0
else
return 1
fi
}
install() {
installFile "$win64_sys_path" "$dxvk_lib64" "$1"
inst64_ret="$?"
inst32_ret=-1
if $wow64; then
installFile "$win32_sys_path" "$dxvk_lib32" "$1"
inst32_ret="$?"
fi
if (( ($inst32_ret == 0) || ($inst64_ret == 0) )); then
overrideDll "$1"
fi
}
uninstall() {
uninstallFile "$win64_sys_path" "$dxvk_lib64" "$1"
uninst64_ret="$?"
uninst32_ret=-1
if $wow64; then
uninstallFile "$win32_sys_path" "$dxvk_lib32" "$1"
uninst32_ret="$?"
fi
if (( ($uninst32_ret == 0) || ($uninst64_ret == 0) )); then
restoreDll "$1"
fi
}
# skip dxgi during install if not explicitly
# enabled, but always try to uninstall it
if $with_dxgi || [ "$action" == "uninstall" ]; then
$action dxgi
fi
$action d3d9
if $with_d3d10 || [ "$action" == "uninstall" ]; then
$action d3d10
$action d3d10_1
fi
$action d3d10core
$action d3d11
wait

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -1,5 +1,5 @@
{
"Version": "1.9.0Alpha3",
"Version": "1.9.0",
"Thank": [
"感谢 @a2035274 @虚幻的早晨 https://bbs.deepin.org/post/238301",
"感谢 @zhangs https://bbs.deepin.org/post/227948",
@ -12,7 +12,13 @@
"感谢 @PossibleVing 提供的新版应用图标",
"感谢 @zhengjl 反馈的 1.7.0 中 .net framrwork 3.5 非离线版安装包的问题以及 1.8.0 重复路径一直自动重复增加的问题",
"感谢 @国川 @刘岐 提供的非 i386、amd64 运行 wine 使用 i386/amd64 可执行文件的教程和脚本",
"感谢 @勇往直前 梦想启航 @189******09 @tfhyl 提供在非 X86 平台的国产 PC 进行测试",
"感谢 @cuisirwork 提供的提供视频教程的建议",
"感谢 @办公助手 提供的非 X86 平台 Wine 运行自定义 exe 应用教程和 deb 包",
"感谢 @季星火 反馈的无法使用该程序删除生成的 .desktop 的问题",
"感谢统信在 Wine 生态适配活动中提供的打包脚本",
"也感谢 DXVK 的开发者开发了 DXVK 这个程序项目链接https://github.com/doitsujin/dxvk",
"也感谢 WineHQ 开发团队开发的 WineHQ项目网址https://dl.winehq.org/",
"",
"可以从上面的各种解决方案更好的学习 Wine 生态适配,也可以看 deepin 论坛板块 https://bbs.deepin.org/module/detail/116 进行学习,最后也向各位有进行 Wine 生态适配的大佬进行由衷的感谢!",
"如果上面有遗漏,请向我反馈补充"

@ -10,6 +10,7 @@
#################
# 引入所需的库
#################
from fileinput import close
import os
import sys
import time
@ -85,7 +86,7 @@ run = None
def runexebutton(self):
global run
DisableButton(True)
if not CheckProgramIsInstall(wine[o1.currentText()]) and o1.currentText() != "基于 linglong 的 deepin-wine6-stable不推荐" and o1.currentText() != "基于 exagear 的 deepin-wine6-stable" and o1.currentText() != "基于 box86 的 deepin-wine6-stable":
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine是否继续使用这个 wine 运行?") == QtWidgets.QMessageBox.No:
DisableButton(False)
return
@ -148,6 +149,14 @@ class Runexebutton_threading(QtCore.QThread):
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = "--disable-gpu"
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'")
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
if setting["TerminalOpen"]:
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + e2.currentText() + "' " + setting["WineOption"] + "\" --keep-open" + wineUsingOption], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else:
@ -160,7 +169,7 @@ class Runexebutton_threading(QtCore.QThread):
except:
text = ""
self.signal.emit(text)
print(text)
print(text, end="")
if len(findExeHistory) == 0 or findExeHistory[-1] != wineBottonPath:
findExeHistory.append(wineBottonPath) # 将记录写进数组
write_txt(get_home() + "/.config/deepin-wine-runner/FindExeHistory.json", str(json.dumps(ListToDictionary(findExeHistory)))) # 将历史记录的数组转换为字典并写入
@ -208,7 +217,7 @@ def make_desktop_on_launcher():
if combobox1.currentText() == "" or e2.currentText() == "": # 判断文本框是否有内容
QtWidgets.QMessageBox.information(widget, "提示", "没有填写需要使用 exe 应用或保存的文件名")
return
if not CheckProgramIsInstall(wine[o1.currentText()]):
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine是否继续使用这个 wine 写入?") == QtWidgets.QMessageBox.No:
DisableButton(False)
return
@ -229,6 +238,12 @@ def make_desktop_on_launcher():
if not setting["Debug"]:
option += "WINEDEBUG=-all "
wineUsingOption = ""
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = "--disable-gpu"
write_txt(get_home() + "/.local/share/applications/" + combobox1.currentText() + ".desktop", f'''[Desktop Entry]
@ -254,7 +269,7 @@ def make_desktop_on_desktop():
if combobox1.currentText() == "" or e2.currentText() == "": # 判断文本框是否有内容
QtWidgets.QMessageBox.information(widget, "提示", "没有填写需要使用 exe 应用或保存的文件名")
return
if not CheckProgramIsInstall(wine[o1.currentText()]):
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine是否继续使用这个 wine 写入?") == QtWidgets.QMessageBox.No:
DisableButton(False)
return
@ -272,6 +287,12 @@ def make_desktop_on_desktop():
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = "--disable-gpu"
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
if not os.path.exists(get_desktop_path()):
os.makedirs(get_home())
os.mknod(get_desktop_path() + "/" + combobox1.currentText() + ".desktop")
@ -336,6 +357,9 @@ def InstallWine():
def InstallWineOnDeepin23():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e \"{programPath}/InstallWineOnDeepin23.py\""]).start()
def InstallWineHQ():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e \"{programPath}/InstallNewWineHQ.sh\""]).start()
def OpenWineBotton():
if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"]
@ -373,10 +397,18 @@ class RunWineProgramThread(QtCore.QThread):
if not setting["Debug"]:
option += "WINEDEBUG=-all "
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'")
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = "--disable-gpu"
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
if setting["TerminalOpen"]:
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"] + "\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"] + " " + wineUsingOption + "\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else:
res = subprocess.Popen(["WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"]], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# 实时读取程序返回
@ -386,7 +418,7 @@ class RunWineProgramThread(QtCore.QThread):
except:
text = ""
self.signal.emit(text)
print(text)
print(text, end="")
if self.history:
if len(findExeHistory) == 0 or findExeHistory[-1] != wineBottonPath:
findExeHistory.append(wineBottonPath) # 将记录写进数组
@ -404,7 +436,7 @@ def RunWineProgram(wineProgram, history = False, Disbled = True):
global runProgram
DisableButton(True)
if not CheckProgramIsInstall(wine[o1.currentText()]) and o1.currentText() != "基于 linglong 的 deepin-wine6-stable不推荐" and o1.currentText() != "基于 exagear 的 deepin-wine6-stable" and o1.currentText() != "基于 box86 的 deepin-wine6-stable":
if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine是否继续使用这个 wine 运行?") == QtWidgets.QMessageBox.No:
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
DisableButton(False)
return
returnText.setText("")
@ -427,8 +459,17 @@ class RunWinetricksThread(QtCore.QThread):
option += f"WINEARCH={setting['Architecture']} "
if not setting["Debug"]:
option += "WINEDEBUG=-all "
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = "--disable-gpu"
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
if setting["TerminalOpen"]:
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + " winetricks --gui\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + f" winetricks --gui {wineUsingOption}\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else:
res = subprocess.Popen([f"WINEPREFIX='{wineBottonPath}' {option} WINE='" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + "' winetricks --gui"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# 实时读取程序返回
@ -445,21 +486,34 @@ runWinetricks = None
def RunWinetricks():
global runWinetricks
DisableButton(True)
if not CheckProgramIsInstall(wine[o1.currentText()]):
if QtWidgets.QMessageBox.question(widget, "提示", "检查到您未安装这个 wine是否继续使用这个 wine 运行?") == QtWidgets.QMessageBox.No:
if not CheckProgramIsInstall(wine[o1.currentText()]) and o1.currentText() != "基于 linglong 的 deepin-wine6-stable不推荐" and o1.currentText() != "基于 exagear 的 deepin-wine6-stable" and o1.currentText() != "基于 box86 的 deepin-wine6-stable":
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
DisableButton(False)
return
if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dlls-arm.7z")
returnText.setText("")
runWinetricks = RunWinetricksThread()
runWinetricks.signal.connect(QT.ShowWineReturn)
runWinetricks.start()
def CleanWineBottonByUOS():
if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"]
else:
wineBottonPath = e1.currentText()
os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"WINE='{wine[o1.currentText()]}' '{programPath}/cleanbottle.sh' '{wineBottonPath}'; echo 按回车退出; read; read; exit;\"")
def FontAppStore():
if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"]
else:
wineBottonPath = e1.currentText()
os.system(f"'{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallFont.py' '{wineBottonPath}' {int(setting['RuntimeCache'])}")
os.system(f"WINE='{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallFont.py' '{wineBottonPath}' {int(setting['RuntimeCache'])}")
def InstallMonoGecko(program):
if e1.currentText() == "":
@ -490,6 +544,11 @@ def InstallMSXML():
os.system(f"'{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallMsxml.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}")
def InstallDXVK():
if not os.path.exists(f"{programPath}/dxvk"):
if os.system(f"7z x \"{programPath}/dxvk.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dxvk.7z")
if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"]
else:
@ -500,6 +559,11 @@ def InstallDXVK():
f"{programPath}/dxvk/setup_dxvk.sh", "install"])
def UninstallDXVK():
if not os.path.exists(f"{programPath}/dxvk"):
if os.system(f"7z x \"{programPath}/dxvk.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
return
os.remove(f"{programPath}/dxvk.7z")
if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"]
else:
@ -553,6 +617,16 @@ def SetDeepinFileDialogDefult():
def SetDeepinFileDialogRecovery():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'pkexec \"{programPath}/deepin-wine-venturi-setter.py\" recovery' --keep-open"]).start()
def DeleteDesktopIcon():
if os.path.exists(f"{get_home()}/.local/share/applications/wine"):
try:
shutil.rmtree(f"{get_home()}/.local/share/applications/wine")
except:
traceback.print_exc()
QtWidgets.QMessageBox.critical(widget, "错误", traceback.format_exc())
return
QtWidgets.QMessageBox.information(widget, "提示", "删除完成")
def DeleteWineBotton():
if QtWidgets.QMessageBox.question(widget, "提示", "你确定要删除容器吗?删除后将无法恢复!\n如果没有选择 wine 容器,将会自动删除默认的容器!") == QtWidgets.QMessageBox.No:
return
@ -610,6 +684,9 @@ def UOSPackageScript():
def RunVM():
threading.Thread(target=os.system, args=[f"bash '{programPath}/RunVM.sh'"]).start()
def CleanProgram():
os.system(f"'{programPath}/launch.sh' deepin-terminal -e \"{programPath}/clean-unuse-program.py\"")
class UpdateWindow():
data = {}
update = None
@ -978,7 +1055,8 @@ defultProgramList = {
"Theme": "",
"MonoGeckoInstaller": True,
"AutoWine": True,
"RuntimeCache": True
"RuntimeCache": True,
"MustRead": False
}
if not os.path.exists(get_home() + "/.config/deepin-wine-runner"): # 如果没有配置文件夹
os.mkdir(get_home() + "/.config/deepin-wine-runner") # 创建配置文件夹
@ -1004,10 +1082,28 @@ if not os.path.exists(get_home() + "/.config/deepin-wine-runner/WineSetting.json
###########################
# 设置变量
###########################
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
# 如果要添加其他 wine请在字典添加其名称和执行路径
try:
wine = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine6 stable": "deepin-wine6-stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine"}
wine = {
"基于 box86 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ",
"基于 exagear 的 deepin-wine6-stable": f"/opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ",
"deepin-wine6 stable": "deepin-wine6-stable",
"deepin-wine5 stable": "deepin-wine5-stable",
"spark-wine7-devel": "spark-wine7-devel",
"deepin-wine": "deepin-wine",
"deepin-wine5": "deepin-wine5",
"wine": "wine",
"wine64": "wine64",
"ukylin-wine": "ukylin-wine",
"基于 linglong 的 deepin-wine6-stable不推荐": f"ll-cli run '' --exec '/bin/deepin-wine6-stable'"
}
untipsWine = ["基于 box86 的 deepin-wine6-stable", "基于 exagear 的 deepin-wine6-stable", "基于 linglong 的 deepin-wine6-stable不推荐"]
canUseWine = []
if os.path.exists("/opt/deepin-box86/box86"):
canUseWine.append("基于 box86 的 deepin-wine6-stable")
if os.path.exists("/opt/exagear/bin/ubt_x64a64_al"):
canUseWine.append("基于 exagear 的 deepin-wine6-stable")
for i in wine.keys():
if not os.system(f"which '{wine[i]}'"):
canUseWine.append(i)
@ -1022,12 +1118,6 @@ try:
break
except:
pass
if os.path.exists("/opt/deepin-box86/box86"):
wine["基于 box86 的 deepin-wine6-stable"] = f"BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine "
canUseWine.append("基于 box86 的 deepin-wine6-stable")
if os.path.exists("/opt/exagear/bin/ubt_x64a64_al"):
wine["基于 exagear 的 deepin-wine6-stable"] = f"/opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine "
canUseWine.append("基于 exagear 的 deepin-wine6-stable")
shellHistory = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/ShellHistory.json")).values())
findExeHistory = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/FindExeHistory.json")).values())
wineBottonHistory = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineBottonHistory.json")).values())
@ -1050,7 +1140,6 @@ except:
###########################
# 程序信息
###########################
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
iconPath = "{}/deepin-wine-runner.svg".format(programPath)
programUrl = "https://gitee.com/gfdgd-xi/deep-wine-runner\nhttps://github.com/gfdgd-xi/deep-wine-runner\nhttps://www.gitlink.org.cn/gfdgd_xi/deep-wine-runner"
information = json.loads(readtxt(f"{programPath}/information.json"))
@ -1065,26 +1154,32 @@ tips = '''<h4>提示:</h4>
exe路径\' 参数 \'
即可单引号需要输入
5wine 容器如果没有指定则会默认为 ~/.wine
6在使用 linglong 包的 Wine 应用时必须安装至少一个 linglong 的使用 Wine 软件包才会出现该选项
6对于非 X86 的用户来说请不要使用本程序自带的 Wine 安装程序和 Windows 虚拟机安装功能检测到为非 X86 架构会自动禁用
7在使用 linglong 包的 Wine 应用时必须安装至少一个 linglong 的使用 Wine 软件包才会出现该选项
而程序识别到的 Wine 是按 linglong 的使用 Wine 软件包名的字母排序第一个的 Wine且生成的容器不在用户目录下而是在容器的用户目录下~/.deepinwine/tmp桌面下载文档等被映射的目录除外
同理需要运行的 EXE 也必须在被映射的目录内
7如果是使用 Deepin 23 Wine 安装脚本请切记安装过程会临时添加 Deepin 20 apt 不要中断安装以及
8如果是使用 Deepin 23 Wine 安装脚本请切记安装过程会临时添加 Deepin 20 apt 不要中断安装以及
<b>千万不要中断后不删除源的情况下 apt upgrade </b>中断后只需重新打开脚本输入 repair 或者随意安装一个 Wine会自动执行恢复操作即可
以及此脚本安装的 Wine 无法保证 100% 能使用以及副作用是会提示
<code>N: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构跳过配置文件 'main/binary-i386/Packages' 的获取</code>'''
updateThingsString = '''※1、修复了重复路径一直自动重复增加的问题
updateThingsString = '''<b>※1、修复了重复路径一直自动重复增加的问题
2修复了两个打包器打包错误的问题非基于生态活动脚本的为 wine 导入错误基于生态活动脚本的为架构有误导致打包出的 deb 无法打包
3适配了部分非 i386amd64 架构计算机的 UOS 系统使用的 wine
3适配了部分非 i386amd64 架构计算机的 UOS 系统使用的 wine 并支持打包非 i386amd64 架构计算机的 UOS 系统使用的 wine 程序 deb
4支持安装 dxvk遵守 Zlib 开源协议
5支持不显示没有安装的 Wine方便用户识别
6增加字体商店
5运行器打包器包括非基于生态适配活动脚本制作的支持使用 Wine 生态适配活动的容器清理脚本
6支持更加简易的安装最新版的 WineHQ</b>
7支持不显示没有安装的 Wine方便用户识别
8增加字体商店
9修改了 Wine 的顺序使其更加合理
10支持删除安装 exe 后在启动器的快捷方式
'''
for i in information["Thank"]:
thankText += f"{i}\n"
updateTime = "2022年08月05日"
updateTime = "2022年08月11"
about = f'''<h1>关于</h1>
<p>一个能让Linux用户更加方便运行Windows应用的程序内置了对wine图形话的支持和各种Wine工具和自制Wine程序打包器运行库安装工具等等</p>
<p>同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具可以做到只需要用户下载系统镜像并点击安装即可无需顾及虚拟机安装创建虚拟机的分区等等</p>
<p>本程序依照 GPLV3 协议开源</p>
<pre>
一个图形化了如下命令的程序最简单格式
@ -1261,24 +1356,30 @@ menu = window.menuBar()
programmenu = menu.addMenu("程序(&P)")
p1 = QtWidgets.QAction("安装 wine(&I)")
installWineOnDeepin23 = QtWidgets.QAction("安装 wine(只限Deepin23)")
installWineHQ = QtWidgets.QAction("安装 WineHQ")
p2 = QtWidgets.QAction("设置程序(&S)")
p3 = QtWidgets.QAction("清空软件历史记录(&C)")
cleanCache = QtWidgets.QAction("清空软件缓存")
cleanProgramUnuse = QtWidgets.QAction("删除程序组件")
p4 = QtWidgets.QAction("退出程序(&E)")
programmenu.addAction(p1)
programmenu.addAction(installWineOnDeepin23)
programmenu.addAction(installWineHQ)
programmenu.addSeparator()
programmenu.addAction(p2)
programmenu.addSeparator()
programmenu.addAction(p3)
programmenu.addAction(cleanCache)
programmenu.addAction(cleanProgramUnuse)
programmenu.addSeparator()
programmenu.addAction(p4)
p1.triggered.connect(InstallWine)
installWineOnDeepin23.triggered.connect(InstallWineOnDeepin23)
installWineHQ.triggered.connect(InstallWineHQ)
p2.triggered.connect(ProgramSetting.ShowWindow)
p3.triggered.connect(CleanProgramHistory)
cleanCache.triggered.connect(CleanProgramCache)
cleanProgramUnuse.triggered.connect(CleanProgram)
p4.triggered.connect(window.close)
wineOption = menu.addMenu("Wine(&W)")
@ -1286,14 +1387,17 @@ w1 = QtWidgets.QAction("打开 Wine 容器目录")
w2 = QtWidgets.QAction("安装常见字体")
w3 = QtWidgets.QAction("安装自定义字体")
w4 = QtWidgets.QAction("删除选择的 Wine 容器")
cleanBottonUOS = QtWidgets.QAction("清理 Wine 容器(基于 Wine 适配活动脚本)")
w5 = QtWidgets.QAction("打包 wine 应用")
w6 = QtWidgets.QAction("使用官方 Wine 适配活动的脚本进行打包")
w7 = QtWidgets.QAction("从镜像获取DLL只支持Windows XP、Windows Server 2003官方安装镜像")
updateGeek = QtWidgets.QAction("从 Geek Uninstaller 官网升级程序")
deleteDesktopIcon = QtWidgets.QAction("删除所有 Wine 程序在启动器的快捷方式")
wineOption.addAction(w1)
wineOption.addAction(w2)
wineOption.addAction(w3)
wineOption.addAction(w4)
wineOption.addAction(cleanBottonUOS)
wineOption.addSeparator()
wineOption.addAction(w5)
wineOption.addAction(w6)
@ -1354,10 +1458,13 @@ installDxvk = QtWidgets.QAction("安装 DXVK")
uninstallDxvk = QtWidgets.QAction("卸载 DXVK")
dxvkMenu.addAction(installDxvk)
dxvkMenu.addAction(uninstallDxvk)
wineOption.addSeparator()
wineOption.addAction(deleteDesktopIcon)
w1.triggered.connect(OpenWineBotton)
w2.triggered.connect(InstallWineFont)
w3.triggered.connect(OpenWineFontPath)
w4.triggered.connect(DeleteWineBotton)
cleanBottonUOS.triggered.connect(CleanWineBottonByUOS)
w5.triggered.connect(BuildExeDeb)
w6.triggered.connect(UOSPackageScript)
w7.triggered.connect(GetDllFromWindowsISO.ShowWindow)
@ -1384,6 +1491,7 @@ wm4_1.triggered.connect(lambda: os.system(f"'{programPath}/launch.sh' deepin-ter
wm4_2.triggered.connect(lambda: os.system(f"'{programPath}/launch.sh' deepin-terminal -C 'pkexec apt purge winbind -y' --keep-open"))
installDxvk.triggered.connect(InstallDXVK)
uninstallDxvk.triggered.connect(UninstallDXVK)
deleteDesktopIcon.triggered.connect(DeleteDesktopIcon)
virtualMachine = menu.addMenu("虚拟机(&V)")
v1 = QtWidgets.QAction("使用 Virtualbox 虚拟机运行 Windows 应用")
@ -1451,6 +1559,24 @@ if setting["AutoWine"]:
o1.addItems(canUseWine)
else:
o1.addItems(wine.keys())
# 禁用被精简掉的控件
for i in [
[[p1, installWineOnDeepin23, installWineHQ], f"{programPath}/InstallWineOnDeepin23.py"],
[[w5], f"{programPath}/deepin-wine-packager.py"],
[[w6], f"{programPath}/deepin-wine-packager-with-script.py"],
[[p1, v1], f"{programPath}/RunVM.sh"]
]:
if not os.path.exists(i[1]):
for x in i[0]:
x.setDisabled(True)
# 有些功能是非 X86 不适用的,需要屏蔽
if subprocess.getoutput("arch").lower() != "x86_64":
p1.setDisabled(True)
installWineOnDeepin23.setDisabled(True)
virtualMachine.setDisabled(True)
v1.setDisabled(True)
installWineHQ.setDisabled(True)
pass
o1.setCurrentText(setting["DefultWine"])
e1.setEditText(setting["DefultBotton"])
e2.setEditText("")

Binary file not shown.

@ -1,6 +1,9 @@
#!/bin/sh
WINE_CMD="deepin-wine5"
if [ $WINE = "" ]; then
WINE_CMD="deepin-wine5"
else
WINE_CMD=$WINE
fi
userdir=$USER
remove_file()
@ -364,7 +367,7 @@ if [ -z "$1" ]; then
echo "prefix should be given"
exit 1
fi
WINEPREFIX=$1
BottlePath=$1
BottleBase=${BottlePath}/drive_c

@ -1,3 +1,3 @@
{
"Version": "1.9.0Alpha3"
"Version": "1.9.0"
}

@ -115,7 +115,8 @@ def PackageDeb():
QT.run.start()
def RunCommand(command):
commandReturn.append(command)
if command.replace("\n", "").replace(" ", "") != "":
commandReturn.append(command.replace("\n", ""))
def ShowHelp():
QtWidgets.QMessageBox.information(widget, "帮助", f"下面是有关打包器的各个输入框的意义以及有关的 UOS 填写标准\n{tips}")

38800
system.reg Normal file

File diff suppressed because it is too large Load Diff

871
user.reg Normal file

@ -0,0 +1,871 @@
WINE REGISTRY Version 2
;; All keys relative to \\User\\S-1-5-21-0-0-0-1000
#arch=win32
[AppEvents\\Schemes\\Apps\\Explorer\\Navigating\\.Current] 1660099897
#time=1d8ac641c4eebbe
@=""
[Control Panel\\Accessibility\\AudioDescription] 1660099895
#time=1d8ac641ace0644
"Locale"=dword:00000000
"On"="0"
[Control Panel\\Accessibility\\Blind Access] 1660099895
#time=1d8ac641acdfe9c
"On"="0"
[Control Panel\\Accessibility\\Keyboard Preference] 1660099895
#time=1d8ac641acdf398
"On"="1"
[Control Panel\\Accessibility\\ShowSounds] 1660099895
#time=1d8ac641ace00a4
"On"="0"
[Control Panel\\Colors] 1660099895
#time=1d8ac641adf6196
[Control Panel\\Desktop] 1660099895
#time=1d8ac641ace0428
"ActiveWndTrackTimeout"=dword:00000000
"BlockSendInputResets"="0"
"CaretWidth"=dword:00000001
"ClickLockTime"=dword:000004b0
"DoubleClickHeight"="4"
"DoubleClickWidth"="4"
"DragFullWindows"="0"
"DragHeight"="4"
"DragWidth"="4"
"FocusBorderHeight"=dword:00000001
"FocusBorderWidth"=dword:00000001
"FontSmoothing"="2"
"FontSmoothingGamma"=dword:00000000
"FontSmoothingOrientation"=dword:00000001
"FontSmoothingType"=dword:00000001
"ForegroundFlashCount"=dword:00000003
"ForegroundLockTimeout"=dword:00000000
"IconTitleWrap"="1"
"LowPowerActive"="0"
"MenuShowDelay"="400"
"UserPreferencesMask"=hex:30,00,00,80,12,00,00,00
"Wallpaper"=""
"WheelScrollChars"="3"
"WheelScrollLines"="3"
[Control Panel\\Desktop\\WindowMetrics] 1660099895
#time=1d8ac641ace01c6
"BorderWidth"="-15"
"CaptionHeight"="-270"
"CaptionWidth"="-270"
"IconSpacing"="-1125"
"IconTitleWrap"="1"
"IconVerticalSpacing"="-1125"
"MenuHeight"="-270"
"MenuWidth"="-270"
"PaddedBorderWidth"="0"
"ScrollHeight"="-240"
"ScrollWidth"="-240"
"SmCaptionHeight"="-225"
"SmCaptionWidth"="-225"
[Control Panel\\International] 1660099895
#time=1d8ac641ab76f7e
"iCalendarType"="1"
"iCountry"="86"
"iCurrDigits"="2"
"iCurrency"="0"
"iDate"="2"
"iDigits"="2"
"iFirstDayOfWeek"="6"
"iFirstWeekOfYear"="0"
"iLDate"="2"
"iLZero"="0"
"iMeasure"="0"
"iNegCurr"="2"
"iNegNumber"="1"
"iPaperSize"="9"
"iTime"="1"
"iTimePrefix"="1"
"iTLZero"="0"
"Locale"="00000804"
"LocaleName"="zh-CN"
"Numshape"="1"
"s1159"="\x4e0a\x5348"
"s2359"="\x4e0b\x5348"
"sCountry"="People's Republic of China"
"sCurrency"="\xffe5"
"sDate"="-"
"sDecimal"="."
"sGrouping"="3;0"
"sLanguage"="CHS"
"sList"=","
"sLongDate"="yyyy'\x5e74'M'\x6708'd'\x65e5'"
"sMonDecimalSep"="."
"sMonGrouping"="3;0"
"sMonThousandSep"=","
"sNativeDigits"="0123456789"
"sNegativeSign"="-"
"sPositiveSign"=""
"sShortDate"="yyyy-M-d"
"sThousand"=","
"sTime"=":"
"sTimeFormat"="H:mm:ss"
"sYearMonth"="yyyy'\x5e74'M'\x6708'"
[Control Panel\\International\\Geo] 1660099895
#time=1d8ac641ab75f5c
"Nation"="45"
[Control Panel\\Keyboard] 1660099895
#time=1d8ac641acdf44c
"KeyboardDelay"="1"
"KeyboardSpeed"="31"
[Control Panel\\Mouse] 1660099895
#time=1d8ac641ace0252
"ActiveWindowTracking"=dword:00000000
"DoubleClickHeight"="4"
"DoubleClickSpeed"="500"
"DoubleClickWidth"="4"
"MouseHoverHeight"="4"
"MouseHoverTime"="400"
"MouseHoverWidth"="4"
"MouseSensitivity"="10"
"MouseSpeed"="1"
"MouseThreshold1"="6"
"MouseThreshold2"="10"
"SnapToDefaultButton"="0"
"SwapMouseButtons"="0"
[Control Panel\\Sound] 1660099895
#time=1d8ac641acdd89a
"Beep"="Yes"
[Environment] 1660099897
#time=1d8ac641bf2343c
"TEMP"="C:\\users\\@current_user@\\Temp"
"TMP"="C:\\users\\@current_user@\\Temp"
[Keyboard Layout\\Preload] 1660099895
#time=1d8ac641ad8980c
"1"="e0010804"
[Software\\Microsoft\\Internet Explorer\\Main] 1660099897
#time=1d8ac641c4a3ec0
"Search Page"="https://www.google.com"
"Start Page"="https://www.winehq.org"
[Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl] 1660099897
#time=1d8ac641bcbc69e
[Software\\Microsoft\\Internet Explorer\\Settings] 1660099897
#time=1d8ac641c4a4078
"Text Color"="0,0,0"
[Software\\Microsoft\\Protected Storage System Provider] 1660099897
#time=1d8ac641c4eec7c
[Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders] 1660099897
#time=1d8ac641bf1734e
"Administrative Tools"="C:\\users\\@current_user@\\Start Menu\\Programs\\Administrative Tools"
"AppData"="C:\\users\\@current_user@\\Application Data"
"Cache"="C:\\users\\@current_user@\\Local Settings\\Temporary Internet Files"
"Cookies"="C:\\users\\@current_user@\\Cookies"
"Desktop"="C:\\users\\@current_user@\\Desktop"
"Favorites"="C:\\users\\@current_user@\\Favorites"
"Fonts"="C:\\windows\\Fonts"
"History"="C:\\users\\@current_user@\\Local Settings\\History"
"Local AppData"="C:\\users\\@current_user@\\Local Settings\\Application Data"
"My Music"="C:\\users\\@current_user@\\My Music"
"My Pictures"="C:\\users\\@current_user@\\\x6211\x7684\x56fe\x7247"
"My Videos"="C:\\users\\@current_user@\\My Videos"
"NetHood"="C:\\users\\@current_user@\\NetHood"
"Personal"="C:\\users\\@current_user@\\My Documents"
"PrintHood"="C:\\users\\@current_user@\\PrintHood"
"Programs"="C:\\users\\@current_user@\\Start Menu\\Programs"
"Recent"="C:\\users\\@current_user@\\Recent"
"SendTo"="C:\\users\\@current_user@\\SendTo"
"Start Menu"="C:\\users\\@current_user@\\Start Menu"
"StartUp"="C:\\users\\@current_user@\\Start Menu\\Programs\\StartUp"
"Templates"="C:\\users\\@current_user@\\Templates"
"{374DE290-123F-4565-9164-39C4925E467B}"="C:\\users\\@current_user@\\Downloads"
"{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}"="C:\\users\\@current_user@\\Saved Games"
"{56784854-C6CB-462B-8169-88E350ACB882}"="C:\\users\\@current_user@\\Contacts"
"{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}"="C:\\users\\@current_user@\\Searches"
"{A520A1A4-1780-4FF6-BD18-167343C5AF16}"="C:\\users\\@current_user@\\AppData\\LocalLow"
"{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}"="C:\\users\\@current_user@\\Links"
[Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders] 1660099897
#time=1d8ac641bf1701a
"Administrative Tools"=str(2):"%USERPROFILE%\\Start Menu\\Programs\\Administrative Tools"
"AppData"=str(2):"%USERPROFILE%\\Application Data"
"Cache"=str(2):"%USERPROFILE%\\Local Settings\\Temporary Internet Files"
"Cookies"=str(2):"%USERPROFILE%\\Cookies"
"Desktop"=str(2):"%USERPROFILE%\\Desktop"
"Favorites"=str(2):"%USERPROFILE%\\Favorites"
"Fonts"=str(2):"C:\\windows\\Fonts"
"History"=str(2):"%USERPROFILE%\\Local Settings\\History"
"Local AppData"=str(2):"%USERPROFILE%\\Local Settings\\Application Data"
"My Music"=str(2):"%USERPROFILE%\\My Music"
"My Pictures"=str(2):"%USERPROFILE%\\\x6211\x7684\x56fe\x7247"
"My Videos"=str(2):"%USERPROFILE%\\My Videos"
"NetHood"=str(2):"%USERPROFILE%\\NetHood"
"Personal"=str(2):"%USERPROFILE%\\My Documents"
"PrintHood"=str(2):"%USERPROFILE%\\PrintHood"
"Programs"=str(2):"%USERPROFILE%\\Start Menu\\Programs"
"Recent"=str(2):"%USERPROFILE%\\Recent"
"SendTo"=str(2):"%USERPROFILE%\\SendTo"
"Start Menu"=str(2):"%USERPROFILE%\\Start Menu"
"StartUp"=str(2):"%USERPROFILE%\\Start Menu\\Programs\\StartUp"
"Templates"=str(2):"%USERPROFILE%\\Templates"
"{374DE290-123F-4565-9164-39C4925E467B}"=str(2):"%USERPROFILE%\\Downloads"
"{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}"=str(2):"%USERPROFILE%\\Saved Games"
"{56784854-C6CB-462B-8169-88E350ACB882}"=str(2):"%USERPROFILE%\\Contacts"
"{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}"=str(2):"%USERPROFILE%\\Searches"
"{A520A1A4-1780-4FF6-BD18-167343C5AF16}"=str(2):"%USERPROFILE%\\AppData\\LocalLow"
"{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}"=str(2):"%USERPROFILE%\\Links"
[Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings] 1660099897
#time=1d8ac641c2cc93a
"User Agent"="Mozilla/4.0 (compatible; MSIE 8.0; Win32)"
[Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap] 1660099897
#time=1d8ac641c2cc5f2
@=""
"IntranetName"=dword:00000001
"ProxyByPass"=dword:00000001
"UNCAsIntranet"=dword:00000001
[Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Domains] 1660099897
#time=1d8ac641c2cc35e
@=""
[Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProtocolDefaults] 1660099897
#time=1d8ac641c2cc098
@=""
"@ivt"=dword:00000001
"file"=dword:00000003
"ftp"=dword:00000003
"http"=dword:00000003
"https"=dword:00000003
[Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Ranges] 1660099897
#time=1d8ac641c2cc660
@=""
[Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones] 1660099897
#time=1d8ac641c2f5790
@=""
[Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\0] 1660099897
#time=1d8ac641c2d8596
@=""
"1001"=dword:00000000
"1004"=dword:00000000
"1200"=dword:00000000
"1201"=dword:00000001
"1400"=dword:00000000
"1402"=dword:00000000
"1405"=dword:00000000
"1406"=dword:00000000
"1407"=dword:00000000
"1601"=dword:00000000
"1604"=dword:00000000
"1605"=dword:00000000
"1606"=dword:00000000
"1607"=dword:00000000
"1608"=dword:00000000
"1609"=dword:00000001
"1800"=dword:00000000
"1802"=dword:00000000
"1803"=dword:00000000
"1804"=dword:00000000
"1805"=dword:00000000
"1A00"=dword:00000000
"1A02"=dword:00000000
"1A03"=dword:00000000
"1A04"=dword:00000000
"1A05"=dword:00000000
"1A06"=dword:00000000
"1A10"=dword:00000000
"1C00"=dword:00020000
"1E05"=dword:00030000
"CurrentLevel"=dword:00000000
"Description"="Your computer"
"DisplayName"="My Computer"
"Flags"=dword:00000021
"Icon"="explorer.exe#0100"
[Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\1] 1660099897
#time=1d8ac641c2e0f20
@=""
"1001"=dword:00000001
"1004"=dword:00000003
"1200"=dword:00000000
"1201"=dword:00000003
"1400"=dword:00000000
"1402"=dword:00000000
"1405"=dword:00000000
"1406"=dword:00000001
"1407"=dword:00000000
"1601"=dword:00000000
"1604"=dword:00000000
"1605"=dword:00000000
"1606"=dword:00000000
"1607"=dword:00000000
"1608"=dword:00000000
"1609"=dword:00000001
"1800"=dword:00000001
"1802"=dword:00000000
"1803"=dword:00000000
"1804"=dword:00000001
"1805"=dword:00000000
"1A00"=dword:00020000
"1A02"=dword:00000000
"1A03"=dword:00000000
"1A04"=dword:00000000
"1A05"=dword:00000000
"1A06"=dword:00000000
"1A10"=dword:00000000
"1C00"=dword:00020000
"1E05"=dword:00020000
"CurrentLevel"=dword:00010500
"Description"="This zone contains all Web sites that are on your organization's intranet."
"DisplayName"="Local intranet"
"Flags"=dword:000000db
"Icon"="shell32.dll#0018"
"MinLevel"=dword:00010000
"RecommendedLevel"=dword:00010500
[Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\2] 1660099897
#time=1d8ac641c2eaebc
@=""
"1001"=dword:00000000
"1004"=dword:00000001
"1200"=dword:00000000
"1201"=dword:00000001
"1400"=dword:00000000
"1402"=dword:00000000
"1405"=dword:00000000
"1406"=dword:00000000
"1407"=dword:00000000
"1601"=dword:00000000
"1604"=dword:00000000
"1605"=dword:00000000
"1606"=dword:00000000
"1607"=dword:00000000
"1608"=dword:00000000
"1609"=dword:00000001
"1800"=dword:00000000
"1802"=dword:00000000
"1803"=dword:00000000
"1804"=dword:00000000
"1805"=dword:00000000
"1A00"=dword:00000000
"1A02"=dword:00000000
"1A03"=dword:00000000
"1A04"=dword:00000000
"1A05"=dword:00000000
"1A06"=dword:00000000
"1A10"=dword:00000000
"1C00"=dword:00030000
"1E05"=dword:00030000
"CurrentLevel"=dword:00010000
"Description"="This zone contains Web sites that you trust not to damage your computer or data."
"DisplayName"="Trusted sites"
"Flags"=dword:00000047
"Icon"="inetcpl.cpl#00004480"
"MinLevel"=dword:00010000
"RecommendedLevel"=dword:00010000
[Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3] 1660099897
#time=1d8ac641c2f54ca
@=""
"1001"=dword:00000001
"1004"=dword:00000003
"1200"=dword:00000000
"1201"=dword:00000003
"1400"=dword:00000000
"1402"=dword:00000000
"1405"=dword:00000000
"1406"=dword:00000003
"1407"=dword:00000000
"1601"=dword:00000001
"1604"=dword:00000000
"1605"=dword:00000000
"1606"=dword:00000000
"1607"=dword:00000000
"1608"=dword:00000000
"1609"=dword:00000001
"1800"=dword:00000001
"1802"=dword:00000000
"1803"=dword:00000000
"1804"=dword:00000001
"1805"=dword:00000001
"1A00"=dword:00020000
"1A02"=dword:00000000
"1A03"=dword:00000000
"1A04"=dword:00000003
"1A05"=dword:00000001
"1A06"=dword:00000000
"1A10"=dword:00000001
"1C00"=dword:00010000
"1E05"=dword:00020000
"CurrentLevel"=dword:00011000
"Description"="This zone contains all Web sites you haven't placed in other zones"
"DisplayName"="Internet"
"Flags"=dword:00000001
"Icon"="inetcpl.cpl#001313"
"MinLevel"=dword:00011000
"RecommendedLevel"=dword:00011000
[Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\4] 1660099897
#time=1d8ac641c2ff6e6
@=""
"1001"=dword:00000003
"1004"=dword:00000003
"1200"=dword:00000003
"1201"=dword:00000003
"1400"=dword:00000003
"1402"=dword:00000003
"1405"=dword:00000003
"1406"=dword:00000003
"1407"=dword:00000003
"1601"=dword:00000001
"1604"=dword:00000001
"1605"=dword:00000000
"1606"=dword:00000003
"1607"=dword:00000003
"1608"=dword:00000003
"1609"=dword:00000001
"1800"=dword:00000003
"1802"=dword:00000001
"1803"=dword:00000003
"1804"=dword:00000003
"1805"=dword:00000001
"1A00"=dword:00010000
"1A02"=dword:00000003
"1A03"=dword:00000003
"1A04"=dword:00000003
"1A05"=dword:00000003
"1A06"=dword:00000003
"1A10"=dword:00000003
"1C00"=dword:00000000
"1E05"=dword:00010000
"CurrentLevel"=dword:00012000
"Description"="This zone contains Web sites that could potentially damage your computer or data."
"DisplayName"="Restricted sites"
"Flags"=dword:00000003
"Icon"="inetcpl.cpl#00004481"
"MinLevel"=dword:00012000
"RecommendedLevel"=dword:00012000
[Software\\Microsoft\\Windows\\CurrentVersion\\Run] 1660099897
#time=1d8ac641c4d9a02
[Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\ftp\\UserChoice] 1660099897
#time=1d8ac641c4f0cb6
"ProgId"="ftp"
[Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice] 1660099897
#time=1d8ac641c4f12d8
"ProgId"="http"
[Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\https\\UserChoice] 1660099897
#time=1d8ac641c4f188c
"ProgId"="https"
[Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon] 1660099897
#time=1d8ac641c4da8ee
[Software\\Wine\\Debug] 1660099897
#time=1d8ac641c4e0a0a
"RelayExclude"="ntdll.RtlEnterCriticalSection;ntdll.RtlTryEnterCriticalSection;ntdll.RtlLeaveCriticalSection;kernel32.48;kernel32.49;kernel32.94;kernel32.95;kernel32.96;kernel32.97;kernel32.98;kernel32.TlsGetValue;kernel32.TlsSetValue;kernel32.FlsGetValue;kernel32.FlsSetValue;kernel32.SetLastError"
"RelayFromExclude"="winex11.drv;winemac.drv;user32;gdi32;advapi32;kernel32"
[Software\\Wine\\Fonts] 1660099895
#time=1d8ac641acbeeae
"Codepages"="936,936"
"LogPixels"=dword:00000060
[Software\\Wine\\Fonts\\External Fonts] 1660099895
#time=1d8ac641acdbe32
"@Droid Sans Fallback (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\droid\\DroidSansFallbackFull.ttf"
"@Noto Sans CJK JP Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"@Noto Sans CJK JP Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"@Noto Sans CJK KR Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"@Noto Sans CJK KR Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"@Noto Sans CJK SC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"@Noto Sans CJK SC Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"@Noto Sans CJK TC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"@Noto Sans CJK TC Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"@Noto Sans Mono CJK JP Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"@Noto Sans Mono CJK JP Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"@Noto Sans Mono CJK KR Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"@Noto Sans Mono CJK KR Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"@Noto Sans Mono CJK SC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"@Noto Sans Mono CJK SC Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"@Noto Sans Mono CJK TC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"@Noto Sans Mono CJK TC Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"@Noto Sans Syriac Eastern (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSyriacEastern-Regular.ttf"
"@Noto Sans Syriac Estrangela (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSyriacEstrangela-Regular.ttf"
"@Noto Sans Syriac Western (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSyriacWestern-Regular.ttf"
"@Noto Serif CJK JP (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Regular.ttc"
"@Noto Serif CJK JP Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Bold.ttc"
"@Noto Serif CJK KR (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Regular.ttc"
"@Noto Serif CJK KR Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Bold.ttc"
"@Noto Serif CJK SC (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Regular.ttc"
"@Noto Serif CJK SC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Bold.ttc"
"@Noto Serif CJK TC (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Regular.ttc"
"@Noto Serif CJK TC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Bold.ttc"
"@Unifont (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\unifont\\unifont.ttf"
"@\x5fae\x8f6f\x96c5\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\msyh.ttf"
"@\x5fae\x8f6f\x96c5\x9ed1 Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\msyhbd.ttf"
"@\x6587\x6cc9\x9a7f\x5fae\x7c73\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\wqy\\wqy-microhei.ttc"
"@\x6587\x6cc9\x9a7f\x6b63\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\wqy\\wqy-zenhei.ttc"
"@\x6587\x6cc9\x9a7f\x70b9\x9635\x6b63\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\wqy\\wqy-zenhei.ttc"
"@\x6587\x6cc9\x9a7f\x7b49\x5bbd\x5fae\x7c73\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\wqy\\wqy-microhei.ttc"
"@\x6587\x6cc9\x9a7f\x7b49\x5bbd\x6b63\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\wqy\\wqy-zenhei.ttc"
"Andale Mono (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\AndaleMo.TTF"
"Arial (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Arial.TTF"
"Arial Black (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\AriBlk.TTF"
"Arial Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Arialbd.TTF"
"Arial Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Arialbi.TTF"
"Arial Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Ariali.TTF"
"Bitstream Vera Sans (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ttf-bitstream-vera\\Vera.ttf"
"Bitstream Vera Sans Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ttf-bitstream-vera\\VeraBd.ttf"
"Bitstream Vera Sans Bold Oblique (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ttf-bitstream-vera\\VeraBI.ttf"
"Bitstream Vera Sans Mono (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ttf-bitstream-vera\\VeraMono.ttf"
"Bitstream Vera Sans Mono Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ttf-bitstream-vera\\VeraMoBd.ttf"
"Bitstream Vera Sans Mono Bold Oblique (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ttf-bitstream-vera\\VeraMoBI.ttf"
"Bitstream Vera Sans Mono Oblique (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ttf-bitstream-vera\\VeraMoIt.ttf"
"Bitstream Vera Sans Oblique (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ttf-bitstream-vera\\VeraIt.ttf"
"Bitstream Vera Serif (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ttf-bitstream-vera\\VeraSe.ttf"
"Bitstream Vera Serif Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ttf-bitstream-vera\\VeraSeBd.ttf"
"cmex10 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lyx\\cmex10.ttf"
"cmmi10 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lyx\\cmmi10.ttf"
"cmr10 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lyx\\cmr10.ttf"
"cmsy10 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lyx\\cmsy10.ttf"
"Comic Sans MS (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Comic.TTF"
"Comic Sans MS Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Comicbd.TTF"
"Courier New (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\cour.ttf"
"Courier New Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\courbd.ttf"
"Courier New Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\courbi.ttf"
"Courier New Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\couri.ttf"
"Deepin OpenSymbol 2 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\deepin\\DeepinOpenSymbol2.ttf"
"Deepin OpenSymbol 3 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\deepin\\DeepinOpenSymbol3.ttf"
"Deepin OpenSymbol 4 Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\deepin\\DeepinOpenSymbol4.ttf"
"Deepin OpenSymbol 5 Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\deepin\\DeepinOpenSymbol5.ttf"
"Deepin OpenSymbol 6 Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\deepin\\DeepinOpenSymbol6.ttf"
"Deepin OpenSymbol Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\deepin\\DeepinOpenSymbol.ttf"
"DejaVu Sans (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\dejavu\\DejaVuSans.ttf"
"DejaVu Sans Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\dejavu\\DejaVuSans-Bold.ttf"
"DejaVu Sans Mono (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\dejavu\\DejaVuSansMono.ttf"
"DejaVu Sans Mono Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\dejavu\\DejaVuSansMono-Bold.ttf"
"DejaVu Serif (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\dejavu\\DejaVuSerif.ttf"
"DejaVu Serif Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\dejavu\\DejaVuSerif-Bold.ttf"
"Droid Sans Fallback (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\droid\\DroidSansFallbackFull.ttf"
"esint10 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lyx\\esint10.ttf"
"eufm10 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lyx\\eufm10.ttf"
"Georgia (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Georgia.TTF"
"Georgia Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Georgiab.TTF"
"Georgia Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Georgiaz.TTF"
"Georgia Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Georgiai.TTF"
"Impact (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Impact.TTF"
"Liberation Mono (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationMono-Regular.ttf"
"Liberation Mono Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationMono-Bold.ttf"
"Liberation Mono Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationMono-BoldItalic.ttf"
"Liberation Mono Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationMono-Italic.ttf"
"Liberation Sans (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSans-Regular.ttf"
"Liberation Sans Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSans-Bold.ttf"
"Liberation Sans Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSans-BoldItalic.ttf"
"Liberation Sans Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSans-Italic.ttf"
"Liberation Sans Narrow (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSansNarrow-Regular.ttf"
"Liberation Sans Narrow Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSansNarrow-Bold.ttf"
"Liberation Sans Narrow Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSansNarrow-BoldItalic.ttf"
"Liberation Sans Narrow Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSansNarrow-Italic.ttf"
"Liberation Serif (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSerif-Regular.ttf"
"Liberation Serif Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSerif-Bold.ttf"
"Liberation Serif Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSerif-BoldItalic.ttf"
"Liberation Serif Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\liberation\\LiberationSerif-Italic.ttf"
"Lohit Devanagari (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lohit-devanagari\\Lohit-Devanagari.ttf"
"Marlett (TrueType)"="Z:\\opt\\deepin-wine6-stable\\share\\wine\\fonts\\marlett.ttf"
"msam10 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lyx\\msam10.ttf"
"msbm10 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lyx\\msbm10.ttf"
"Noto Kufi Arabic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoKufiArabic-Regular.ttf"
"Noto Kufi Arabic Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoKufiArabic-Bold.ttf"
"Noto Mono (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoMono-Regular.ttf"
"Noto Music Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoMusic-Regular.ttf"
"Noto Naskh Arabic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoNaskhArabic-Regular.ttf"
"Noto Naskh Arabic Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoNaskhArabic-Bold.ttf"
"Noto Nastaliq Urdu Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoNastaliqUrdu-Bold.ttf"
"Noto Nastaliq Urdu Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoNastaliqUrdu-Regular.ttf"
"Noto Sans Adlam Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansAdlam-Regular.ttf"
"Noto Sans Adlam Unjoined Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansAdlamUnjoined-Regular.ttf"
"Noto Sans Anatolian Hieroglyphs Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansAnatolianHieroglyphs-Regular.ttf"
"Noto Sans Arabic Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansArabic-Bold.ttf"
"Noto Sans Arabic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansArabic-Regular.ttf"
"Noto Sans Armenian Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansArmenian-Bold.ttf"
"Noto Sans Armenian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansArmenian-Regular.ttf"
"Noto Sans Avestan Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansAvestan-Regular.ttf"
"Noto Sans Bamum Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansBamum-Regular.ttf"
"Noto Sans Bassa Vah Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansBassaVah-Regular.ttf"
"Noto Sans Batak Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansBatak-Regular.ttf"
"Noto Sans Bengali Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansBengali-Bold.ttf"
"Noto Sans Bengali Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansBengali-Regular.ttf"
"Noto Sans Bhaiksuki Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansBhaiksuki-Regular.ttf"
"Noto Sans Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSans-Bold.ttf"
"Noto Sans Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSans-BoldItalic.ttf"
"Noto Sans Brahmi Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansBrahmi-Regular.ttf"
"Noto Sans Buginese Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansBuginese-Regular.ttf"
"Noto Sans Buhid Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansBuhid-Regular.ttf"
"Noto Sans Canadian Aboriginal Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansCanadianAboriginal-Bold.ttf"
"Noto Sans Canadian Aboriginal Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansCanadianAboriginal-Regular.ttf"
"Noto Sans Carian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansCarian-Regular.ttf"
"Noto Sans Caucasian Albanian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansCaucasianAlbanian-Regular.ttf"
"Noto Sans Chakma Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansChakma-Regular.ttf"
"Noto Sans Cham Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansCham-Bold.ttf"
"Noto Sans Cham Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansCham-Regular.ttf"
"Noto Sans Cherokee Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansCherokee-Bold.ttf"
"Noto Sans Cherokee Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansCherokee-Regular.ttf"
"Noto Sans CJK JP Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"Noto Sans CJK JP Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"Noto Sans CJK KR Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"Noto Sans CJK KR Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"Noto Sans CJK SC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"Noto Sans CJK SC Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"Noto Sans CJK TC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"Noto Sans CJK TC Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"Noto Sans Coptic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansCoptic-Regular.ttf"
"Noto Sans Cuneiform Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansCuneiform-Regular.ttf"
"Noto Sans Cypriot Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansCypriot-Regular.ttf"
"Noto Sans Deseret Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansDeseret-Regular.ttf"
"Noto Sans Devanagari Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansDevanagari-Bold.ttf"
"Noto Sans Devanagari Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansDevanagari-Regular.ttf"
"Noto Sans Display Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansDisplay-Bold.ttf"
"Noto Sans Display Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansDisplay-BoldItalic.ttf"
"Noto Sans Display Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansDisplay-Italic.ttf"
"Noto Sans Display Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansDisplay-Regular.ttf"
"Noto Sans Duployan Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansDuployan-Regular.ttf"
"Noto Sans Egyptian Hieroglyphs Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansEgyptianHieroglyphs-Regular.ttf"
"Noto Sans Elbasan Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansElbasan-Regular.ttf"
"Noto Sans Ethiopic Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansEthiopic-Bold.ttf"
"Noto Sans Ethiopic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansEthiopic-Regular.ttf"
"Noto Sans Georgian Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansGeorgian-Bold.ttf"
"Noto Sans Georgian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansGeorgian-Regular.ttf"
"Noto Sans Glagolitic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansGlagolitic-Regular.ttf"
"Noto Sans Gothic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansGothic-Regular.ttf"
"Noto Sans Grantha Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansGrantha-Regular.ttf"
"Noto Sans Gujarati (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansGujarati-Regular.ttf"
"Noto Sans Gujarati Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansGujarati-Bold.ttf"
"Noto Sans Gurmukhi (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansGurmukhi-Regular.ttf"
"Noto Sans Gurmukhi Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansGurmukhi-Bold.ttf"
"Noto Sans Hanunoo Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansHanunoo-Regular.ttf"
"Noto Sans Hatran Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansHatran-Regular.ttf"
"Noto Sans Hebrew Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansHebrew-Bold.ttf"
"Noto Sans Hebrew Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansHebrew-Regular.ttf"
"Noto Sans Imperial Aramaic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansImperialAramaic-Regular.ttf"
"Noto Sans Inscriptional Pahlavi Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansInscriptionalPahlavi-Regular.ttf"
"Noto Sans Inscriptional Parthian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansInscriptionalParthian-Regular.ttf"
"Noto Sans Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSans-Italic.ttf"
"Noto Sans Javanese (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansJavanese-Regular.ttf"
"Noto Sans Javanese Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansJavanese-Bold.ttf"
"Noto Sans Kaithi Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansKaithi-Regular.ttf"
"Noto Sans Kannada Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansKannada-Bold.ttf"
"Noto Sans Kannada Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansKannada-Regular.ttf"
"Noto Sans Kayah Li Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansKayahLi-Regular.ttf"
"Noto Sans Kharoshthi Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansKharoshthi-Regular.ttf"
"Noto Sans Khmer Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansKhmer-Bold.ttf"
"Noto Sans Khmer Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansKhmer-Regular.ttf"
"Noto Sans Khojki Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansKhojki-Regular.ttf"
"Noto Sans Khudawadi Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansKhudawadi-Regular.ttf"
"Noto Sans Lao Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansLao-Bold.ttf"
"Noto Sans Lao Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansLao-Regular.ttf"
"Noto Sans Lepcha Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansLepcha-Regular.ttf"
"Noto Sans Limbu Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansLimbu-Regular.ttf"
"Noto Sans Linear A Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansLinearA-Regular.ttf"
"Noto Sans Linear B Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansLinearB-Regular.ttf"
"Noto Sans Lisu Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansLisu-Regular.ttf"
"Noto Sans Lycian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansLycian-Regular.ttf"
"Noto Sans Lydian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansLydian-Regular.ttf"
"Noto Sans Mahajani Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMahajani-Regular.ttf"
"Noto Sans Malayalam Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMalayalam-Bold.ttf"
"Noto Sans Malayalam Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMalayalam-Regular.ttf"
"Noto Sans Mandaic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMandaic-Regular.ttf"
"Noto Sans Manichaean Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansManichaean-Regular.ttf"
"Noto Sans Marchen Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMarchen-Regular.ttf"
"Noto Sans Math Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMath-Regular.ttf"
"Noto Sans Meetei Mayek Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMeeteiMayek-Regular.ttf"
"Noto Sans Mende Kikakui Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMendeKikakui-Regular.ttf"
"Noto Sans Meroitic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMeroitic-Regular.ttf"
"Noto Sans Miao Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMiao-Regular.ttf"
"Noto Sans Modi Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansModi-Regular.ttf"
"Noto Sans Mongolian (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMongolian-Regular.ttf"
"Noto Sans Mono Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMono-Bold.ttf"
"Noto Sans Mono CJK JP Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"Noto Sans Mono CJK JP Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"Noto Sans Mono CJK KR Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"Noto Sans Mono CJK KR Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"Noto Sans Mono CJK SC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"Noto Sans Mono CJK SC Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"Noto Sans Mono CJK TC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Bold.ttc"
"Noto Sans Mono CJK TC Regular (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSansCJK-Regular.ttc"
"Noto Sans Mono Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMono-Regular.ttf"
"Noto Sans Mro Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMro-Regular.ttf"
"Noto Sans Multani Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMultani-Regular.ttf"
"Noto Sans Myanmar Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMyanmar-Bold.ttf"
"Noto Sans Myanmar Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansMyanmar-Regular.ttf"
"Noto Sans Nabataean Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansNabataean-Regular.ttf"
"Noto Sans New Tai Lue Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansNewTaiLue-Regular.ttf"
"Noto Sans Newa Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansNewa-Regular.ttf"
"Noto Sans NKo Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansNKo-Regular.ttf"
"Noto Sans Ogham Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOgham-Regular.ttf"
"Noto Sans Ol Chiki Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOlChiki-Regular.ttf"
"Noto Sans Old Hungarian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOldHungarian-Regular.ttf"
"Noto Sans Old Italic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOldItalic-Regular.ttf"
"Noto Sans Old North Arabian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOldNorthArabian-Regular.ttf"
"Noto Sans Old Permic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOldPermic-Regular.ttf"
"Noto Sans Old Persian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOldPersian-Regular.ttf"
"Noto Sans Old South Arabian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOldSouthArabian-Regular.ttf"
"Noto Sans Old Turkic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOldTurkic-Regular.ttf"
"Noto Sans Oriya (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOriya-Regular.ttf"
"Noto Sans Oriya Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOriya-Bold.ttf"
"Noto Sans Osage Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOsage-Regular.ttf"
"Noto Sans Osmanya Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansOsmanya-Regular.ttf"
"Noto Sans Pahawh Hmong Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansPahawhHmong-Regular.ttf"
"Noto Sans Palmyrene Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansPalmyrene-Regular.ttf"
"Noto Sans Pau Cin Hau Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansPauCinHau-Regular.ttf"
"Noto Sans PhagsPa Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansPhagsPa-Regular.ttf"
"Noto Sans Phoenician Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansPhoenician-Regular.ttf"
"Noto Sans Psalter Pahlavi Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansPsalterPahlavi-Regular.ttf"
"Noto Sans Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSans-Regular.ttf"
"Noto Sans Rejang Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansRejang-Regular.ttf"
"Noto Sans Runic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansRunic-Regular.ttf"
"Noto Sans Samaritan Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSamaritan-Regular.ttf"
"Noto Sans Saurashtra Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSaurashtra-Regular.ttf"
"Noto Sans Sharada Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSharada-Regular.ttf"
"Noto Sans Shavian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansShavian-Regular.ttf"
"Noto Sans Sinhala Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSinhala-Bold.ttf"
"Noto Sans Sinhala Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSinhala-Regular.ttf"
"Noto Sans Sora Sompeng Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSoraSompeng-Regular.ttf"
"Noto Sans Sundanese Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSundanese-Regular.ttf"
"Noto Sans Syloti Nagri Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSylotiNagri-Regular.ttf"
"Noto Sans Symbols Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSymbols-Bold.ttf"
"Noto Sans Symbols Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSymbols-Regular.ttf"
"Noto Sans Symbols2 Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSymbols2-Regular.ttf"
"Noto Sans Syriac Eastern (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSyriacEastern-Regular.ttf"
"Noto Sans Syriac Estrangela (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSyriacEstrangela-Regular.ttf"
"Noto Sans Syriac Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSyriac-Regular.ttf"
"Noto Sans Syriac Western (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansSyriacWestern-Regular.ttf"
"Noto Sans Tagalog Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTagalog-Regular.ttf"
"Noto Sans Tagbanwa Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTagbanwa-Regular.ttf"
"Noto Sans Tai Le Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTaiLe-Regular.ttf"
"Noto Sans Tai Tham (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTaiTham-Regular.ttf"
"Noto Sans Tai Viet Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTaiViet-Regular.ttf"
"Noto Sans Takri Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTakri-Regular.ttf"
"Noto Sans Tamil Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTamil-Bold.ttf"
"Noto Sans Tamil Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTamil-Regular.ttf"
"Noto Sans Telugu (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTelugu-Regular.ttf"
"Noto Sans Telugu Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTelugu-Bold.ttf"
"Noto Sans Thaana (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansThaana-Regular.ttf"
"Noto Sans Thaana Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansThaana-Bold.ttf"
"Noto Sans Thai Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansThai-Bold.ttf"
"Noto Sans Thai Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansThai-Regular.ttf"
"Noto Sans Tibetan (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTibetan-Regular.ttf"
"Noto Sans Tibetan Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTibetan-Bold.ttf"
"Noto Sans Tifinagh Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTifinagh-Regular.ttf"
"Noto Sans Tirhuta Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansTirhuta-Regular.ttf"
"Noto Sans Ugaritic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansUgaritic-Regular.ttf"
"Noto Sans Vai Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansVai-Regular.ttf"
"Noto Sans Warang Citi Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansWarangCiti-Regular.ttf"
"Noto Sans Yi Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSansYi-Regular.ttf"
"Noto Serif Ahom Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifAhom-Regular.ttf"
"Noto Serif Armenian Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifArmenian-Bold.ttf"
"Noto Serif Armenian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifArmenian-Regular.ttf"
"Noto Serif Balinese Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifBalinese-Regular.ttf"
"Noto Serif Bengali (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifBengali-Regular.ttf"
"Noto Serif Bengali Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifBengali-Bold.ttf"
"Noto Serif Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerif-Bold.ttf"
"Noto Serif Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerif-BoldItalic.ttf"
"Noto Serif CJK JP (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Regular.ttc"
"Noto Serif CJK JP Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Bold.ttc"
"Noto Serif CJK KR (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Regular.ttc"
"Noto Serif CJK KR Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Bold.ttc"
"Noto Serif CJK SC (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Regular.ttc"
"Noto Serif CJK SC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Bold.ttc"
"Noto Serif CJK TC (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Regular.ttc"
"Noto Serif CJK TC Bold (TrueType)"="Z:\\usr\\share\\fonts\\opentype\\noto\\NotoSerifCJK-Bold.ttc"
"Noto Serif Devanagari (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifDevanagari-Regular.ttf"
"Noto Serif Devanagari Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifDevanagari-Bold.ttf"
"Noto Serif Display Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifDisplay-Bold.ttf"
"Noto Serif Display Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifDisplay-BoldItalic.ttf"
"Noto Serif Display Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifDisplay-Italic.ttf"
"Noto Serif Display Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifDisplay-Regular.ttf"
"Noto Serif Ethiopic Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifEthiopic-Bold.ttf"
"Noto Serif Ethiopic Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifEthiopic-Regular.ttf"
"Noto Serif Georgian Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifGeorgian-Bold.ttf"
"Noto Serif Georgian Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifGeorgian-Regular.ttf"
"Noto Serif Gujarati Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifGujarati-Bold.ttf"
"Noto Serif Gujarati Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifGujarati-Regular.ttf"
"Noto Serif Gurmukhi Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifGurmukhi-Bold.ttf"
"Noto Serif Gurmukhi Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifGurmukhi-Regular.ttf"
"Noto Serif Hebrew Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifHebrew-Bold.ttf"
"Noto Serif Hebrew Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifHebrew-Regular.ttf"
"Noto Serif Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerif-Italic.ttf"
"Noto Serif Kannada Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifKannada-Bold.ttf"
"Noto Serif Kannada Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifKannada-Regular.ttf"
"Noto Serif Khmer Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifKhmer-Bold.ttf"
"Noto Serif Khmer Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifKhmer-Regular.ttf"
"Noto Serif Lao Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifLao-Bold.ttf"
"Noto Serif Lao Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifLao-Regular.ttf"
"Noto Serif Malayalam (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifMalayalam-Regular.ttf"
"Noto Serif Malayalam Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifMalayalam-Bold.ttf"
"Noto Serif Myanmar Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifMyanmar-Bold.ttf"
"Noto Serif Myanmar Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifMyanmar-Regular.ttf"
"Noto Serif Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerif-Regular.ttf"
"Noto Serif Sinhala Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifSinhala-Bold.ttf"
"Noto Serif Sinhala Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifSinhala-Regular.ttf"
"Noto Serif Tamil Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifTamil-Bold.ttf"
"Noto Serif Tamil Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifTamil-Regular.ttf"
"Noto Serif Tamil Slanted Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifTamilSlanted-Bold.ttf"
"Noto Serif Tamil Slanted Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifTamilSlanted-Regular.ttf"
"Noto Serif Telugu (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifTelugu-Regular.ttf"
"Noto Serif Telugu Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifTelugu-Bold.ttf"
"Noto Serif Thai Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifThai-Bold.ttf"
"Noto Serif Thai Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifThai-Regular.ttf"
"Noto Serif Tibetan Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifTibetan-Bold.ttf"
"Noto Serif Tibetan Regular (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\noto\\NotoSerifTibetan-Regular.ttf"
"OpenSymbol (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\libreoffice\\opens___.ttf"
"rsfs10 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lyx\\rsfs10.ttf"
"stmary10 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lyx\\stmary10.ttf"
"Symbol (TrueType)"="Z:\\opt\\deepin-wine6-stable\\share\\wine\\fonts\\symbol.ttf"
"Symbola (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ancient-scripts\\Symbola_hint.ttf"
"Tahoma (TrueType)"="Z:\\opt\\deepin-wine6-stable\\share\\wine\\fonts\\tahoma.ttf"
"Tahoma Bold (TrueType)"="Z:\\opt\\deepin-wine6-stable\\share\\wine\\fonts\\tahomabd.ttf"
"Times New Roman (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Times.TTF"
"Times New Roman Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Timesbd.TTF"
"Times New Roman Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Timesbi.TTF"
"Times New Roman Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Timesi.TTF"
"Trebuchet MS (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\trebuc.ttf"
"Trebuchet MS Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Trebucbd.ttf"
"Trebuchet MS Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\trebucbi.ttf"
"Trebuchet MS Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\trebucit.ttf"
"Unifont (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\unifont\\unifont.ttf"
"Unifont CSUR (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\unifont\\unifont_csur.ttf"
"Unifont Upper (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\unifont\\unifont_upper.ttf"
"Verdana (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Verdana.TTF"
"Verdana Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Verdanab.TTF"
"Verdana Bold Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Verdanaz.TTF"
"Verdana Italic (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\Verdanai.TTF"
"wasy10 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\lyx\\wasy10.ttf"
"Webdings (TrueType)"="Z:\\opt\\deepin-wine6-stable\\share\\wine\\fonts\\webdings.ttf"
"Wingdings (TrueType)"="Z:\\opt\\deepin-wine6-stable\\share\\wine\\fonts\\wingding.ttf"
"\x5fae\x8f6f\x96c5\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\msyh.ttf"
"\x5fae\x8f6f\x96c5\x9ed1 Bold (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\ms-core-fonts\\msyhbd.ttf"
"\x6587\x6cc9\x9a7f\x5fae\x7c73\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\wqy\\wqy-microhei.ttc"
"\x6587\x6cc9\x9a7f\x6b63\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\wqy\\wqy-zenhei.ttc"
"\x6587\x6cc9\x9a7f\x70b9\x9635\x6b63\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\wqy\\wqy-zenhei.ttc"
"\x6587\x6cc9\x9a7f\x7b49\x5bbd\x5fae\x7c73\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\wqy\\wqy-microhei.ttc"
"\x6587\x6cc9\x9a7f\x7b49\x5bbd\x6b63\x9ed1 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\wqy\\wqy-zenhei.ttc"

64
userdef.reg Normal file

@ -0,0 +1,64 @@
WINE REGISTRY Version 2
;; All keys relative to \\User\\.Default
#arch=win32
[Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders] 1660099897
#time=1d8ac641bf11958
"Administrative Tools"="C:\\users\\@current_user@\\Start Menu\\Programs\\Administrative Tools"
"AppData"="C:\\users\\@current_user@\\Application Data"
"Cache"="C:\\users\\@current_user@\\Local Settings\\Temporary Internet Files"
"Cookies"="C:\\users\\@current_user@\\Cookies"
"Desktop"="C:\\users\\@current_user@\\Desktop"
"Favorites"="C:\\users\\@current_user@\\Favorites"
"Fonts"="C:\\windows\\Fonts"
"History"="C:\\users\\@current_user@\\Local Settings\\History"
"Local AppData"="C:\\users\\@current_user@\\Local Settings\\Application Data"
"My Music"="C:\\users\\@current_user@\\My Music"
"My Pictures"="C:\\users\\@current_user@\\\x6211\x7684\x56fe\x7247"
"My Videos"="C:\\users\\@current_user@\\My Videos"
"NetHood"="C:\\users\\@current_user@\\NetHood"
"Personal"="C:\\users\\@current_user@\\My Documents"
"PrintHood"="C:\\users\\@current_user@\\PrintHood"
"Programs"="C:\\users\\@current_user@\\Start Menu\\Programs"
"Recent"="C:\\users\\@current_user@\\Recent"
"SendTo"="C:\\users\\@current_user@\\SendTo"
"Start Menu"="C:\\users\\@current_user@\\Start Menu"
"StartUp"="C:\\users\\@current_user@\\Start Menu\\Programs\\StartUp"
"Templates"="C:\\users\\@current_user@\\Templates"
"{374DE290-123F-4565-9164-39C4925E467B}"="C:\\users\\@current_user@\\Downloads"
"{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}"="C:\\users\\@current_user@\\Saved Games"
"{56784854-C6CB-462B-8169-88E350ACB882}"="C:\\users\\@current_user@\\Contacts"
"{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}"="C:\\users\\@current_user@\\Searches"
"{A520A1A4-1780-4FF6-BD18-167343C5AF16}"="C:\\users\\@current_user@\\AppData\\LocalLow"
"{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}"="C:\\users\\@current_user@\\Links"
[Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders] 1660099897
#time=1d8ac641bf1107a
"Administrative Tools"=str(2):"%USERPROFILE%\\Start Menu\\Programs\\Administrative Tools"
"AppData"=str(2):"%USERPROFILE%\\Application Data"
"Cache"=str(2):"%USERPROFILE%\\Local Settings\\Temporary Internet Files"
"Cookies"=str(2):"%USERPROFILE%\\Cookies"
"Desktop"=str(2):"%USERPROFILE%\\Desktop"
"Favorites"=str(2):"%USERPROFILE%\\Favorites"
"Fonts"=str(2):"C:\\windows\\Fonts"
"History"=str(2):"%USERPROFILE%\\Local Settings\\History"
"Local AppData"=str(2):"%USERPROFILE%\\Local Settings\\Application Data"
"My Music"=str(2):"%USERPROFILE%\\My Music"
"My Pictures"=str(2):"%USERPROFILE%\\\x6211\x7684\x56fe\x7247"
"My Videos"=str(2):"%USERPROFILE%\\My Videos"
"NetHood"=str(2):"%USERPROFILE%\\NetHood"
"Personal"=str(2):"%USERPROFILE%\\My Documents"
"PrintHood"=str(2):"%USERPROFILE%\\PrintHood"
"Programs"=str(2):"%USERPROFILE%\\Start Menu\\Programs"
"Recent"=str(2):"%USERPROFILE%\\Recent"
"SendTo"=str(2):"%USERPROFILE%\\SendTo"
"Start Menu"=str(2):"%USERPROFILE%\\Start Menu"
"StartUp"=str(2):"%USERPROFILE%\\Start Menu\\Programs\\StartUp"
"Templates"=str(2):"%USERPROFILE%\\Templates"
"{374DE290-123F-4565-9164-39C4925E467B}"=str(2):"%USERPROFILE%\\Downloads"
"{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}"=str(2):"%USERPROFILE%\\Saved Games"
"{56784854-C6CB-462B-8169-88E350ACB882}"=str(2):"%USERPROFILE%\\Contacts"
"{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}"=str(2):"%USERPROFILE%\\Searches"
"{A520A1A4-1780-4FF6-BD18-167343C5AF16}"=str(2):"%USERPROFILE%\\AppData\\LocalLow"
"{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}"=str(2):"%USERPROFILE%\\Links"

BIN
wined3d.dll.so.7z Normal file

Binary file not shown.