简易打包器支持选择wine版本

This commit is contained in:
gfdgd xi 2023-07-06 18:44:04 +08:00
parent a5d1a04573
commit 59ec3d5822

View File

@ -105,7 +105,7 @@ def ReplaceText(string: str, lists: list):
control = '''Package: @@@Package@@@ control = '''Package: @@@Package@@@
Version: @@@Version@@@ Version: @@@Version@@@
Architecture: i386 Architecture: all
Maintainer: @@@Maintainer@@@ Maintainer: @@@Maintainer@@@
Depends: @@@Depends@@@ Depends: @@@Depends@@@
Section: non-free/otherosfs Section: non-free/otherosfs
@ -119,7 +119,7 @@ info = f'''{{
"appid": "@@@Package@@@", "appid": "@@@Package@@@",
"name": "@@@Name@@@", "name": "@@@Name@@@",
"version": "@@@Version@@@", "version": "@@@Version@@@",
"arch": ["i386"], "arch": ["all"],
"permissions": {{ "permissions": {{
"autostart": false, "autostart": false,
"notification": false, "notification": false,
@ -204,7 +204,7 @@ export MIME_TYPE=""
#####没什么用 #####没什么用
export DEB_PACKAGE_NAME="@@@Package@@@" export DEB_PACKAGE_NAME="@@@Package@@@"
####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关 ####这里写包名才能在启动的时候正确找到files.7z,似乎也和杀残留进程有关
export APPRUN_CMD="deepin-wine6-stable" export APPRUN_CMD="{chooseWine}"
#####wine启动指令建议 #####wine启动指令建议
EXPORT_ENVS="" EXPORT_ENVS=""
@ -312,9 +312,9 @@ def ReadTxt(path):
things = file.read() things = file.read()
return things return things
def GetEXEVersion(exePath): def GetEXEVersion(exePath, bottlePath=get_home() + "/.wine"):
versionPath = f"/tmp/wine-runner-exe-version-{random.randint(0, 1000)}.txt" versionPath = f"/tmp/wine-runner-exe-version-{random.randint(0, 1000)}.txt"
if os.system(f"deepin-wine6-stable '{programPath}/GetEXEVersion.exe' '{exePath}' '{versionPath}'"): if os.system(f"WINEPREFIX='{bottlePath}' {chooseWine} '{programPath}/GetEXEVersion.exe' '{exePath}' '{versionPath}'"):
return "1.0.0" return "1.0.0"
try: try:
exeVersion = ReadTxt(versionPath).replace("\n", "") exeVersion = ReadTxt(versionPath).replace("\n", "")
@ -376,9 +376,9 @@ class RunThread(QtCore.QThread):
def __init__(self) -> None: def __init__(self) -> None:
super().__init__() super().__init__()
def GetEXEVersion(self, exePath): def GetEXEVersion(self, exePath, bottlePath=get_home() + "/.wine"):
versionPath = f"/tmp/wine-runner-exe-version-{random.randint(0, 1000)}.txt" versionPath = f"/tmp/wine-runner-exe-version-{random.randint(0, 1000)}.txt"
self.RunCommand(f"deepin-wine6-stable '{programPath}/GetEXEVersion.exe' '{exePath}' '{versionPath}'") self.RunCommand(f"WINEPREFIX='{bottlePath}' {chooseWine} '{programPath}/GetEXEVersion.exe' '{exePath}' '{versionPath}'")
try: try:
exeVersion = ReadTxt(versionPath).replace("\n", "") exeVersion = ReadTxt(versionPath).replace("\n", "")
if exeVersion.replace(" ", "") == "": if exeVersion.replace(" ", "") == "":
@ -433,7 +433,7 @@ class RunThread(QtCore.QThread):
self.RunCommand(f"mkdir -pv '{bottlePath}'") self.RunCommand(f"mkdir -pv '{bottlePath}'")
self.RunCommand(f"chmod 777 -Rv '{bottlePath}'") self.RunCommand(f"chmod 777 -Rv '{bottlePath}'")
# 禁止生成 .desktop 文件 # 禁止生成 .desktop 文件
self.RunCommand(f"WINEPREFIX='{bottlePath}' deepin-wine6-stable 'reg' 'add' 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v winemenubuilder.exe '/f'") self.RunCommand(f"WINEPREFIX='{bottlePath}' {chooseWine} 'reg' 'add' 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v winemenubuilder.exe '/f'")
# 写入字体 # 写入字体
self.RunCommand(f"WINEPREFIX='{bottlePath}' '{programPath}/AutoShell/command/installfont' 1") self.RunCommand(f"WINEPREFIX='{bottlePath}' '{programPath}/AutoShell/command/installfont' 1")
# 安装包 # 安装包
@ -441,7 +441,7 @@ class RunThread(QtCore.QThread):
global pressCompleteDownload global pressCompleteDownload
pressCompleteDownload = False pressCompleteDownload = False
installCmpleteButton.setEnabled(True) installCmpleteButton.setEnabled(True)
self.RunCommand(f"WINEPREFIX='{bottlePath}' deepin-wine6-stable '{exePath.text()}' &") # 非堵塞线程 self.RunCommand(f"WINEPREFIX='{bottlePath}' {chooseWine} '{exePath.text()}' &") # 非堵塞线程
# 安装锁,锁解除后才可继续 # 安装锁,锁解除后才可继续
while not pressCompleteDownload: while not pressCompleteDownload:
@ -481,7 +481,7 @@ class RunThread(QtCore.QThread):
exePathInBottle = rightLnk[1] exePathInBottle = rightLnk[1]
exeName = os.path.splitext(os.path.basename(folderExePath))[0] exeName = os.path.splitext(os.path.basename(folderExePath))[0]
exePathInSystem = rightLnk[1].replace("\\", "/").replace("c:", f"{bottlePath}/drive_c") exePathInSystem = rightLnk[1].replace("\\", "/").replace("c:", f"{bottlePath}/drive_c")
debPackageVersion = self.GetEXEVersion(exePathInSystem) debPackageVersion = self.GetEXEVersion(exePathInSystem, bottlePath)
cpNow = False cpNow = False
for i in iconList: for i in iconList:
path = i[1].replace("wineBottonPath", bottlePath).lower() path = i[1].replace("wineBottonPath", bottlePath).lower()
@ -497,7 +497,7 @@ class RunThread(QtCore.QThread):
# 绿色软件 # 绿色软件
self.RunCommand(f"mkdir -pv '{bottlePath}'") self.RunCommand(f"mkdir -pv '{bottlePath}'")
self.RunCommand(f"chmod 777 -Rv '{bottlePath}'") self.RunCommand(f"chmod 777 -Rv '{bottlePath}'")
self.RunCommand(f"WINEPREFIX='{bottlePath}' deepin-wine6-stable exit") self.RunCommand(f"WINEPREFIX='{bottlePath}' {chooseWine} exit")
folderExePath = os.path.dirname(exePath.text()) folderExePath = os.path.dirname(exePath.text())
exePathInBottle = f"c:/Program Files/{os.path.basename(folderExePath)}/{exeName}" exePathInBottle = f"c:/Program Files/{os.path.basename(folderExePath)}/{exeName}"
exeName = os.path.splitext(os.path.basename(os.path.basename(exePath.text())))[0] exeName = os.path.splitext(os.path.basename(os.path.basename(exePath.text())))[0]
@ -505,9 +505,9 @@ class RunThread(QtCore.QThread):
self.RunCommand(f"'{programPath}/wrestool' '{exePath.text()}' -x -t 14 > '{debBuildPath}/{programIconPath}'") self.RunCommand(f"'{programPath}/wrestool' '{exePath.text()}' -x -t 14 > '{debBuildPath}/{programIconPath}'")
# 拷贝文件到容器 # 拷贝文件到容器
self.RunCommand(f"cp -rv '{folderExePath}' '{bottlePath}/drive_c/Program Files'") self.RunCommand(f"cp -rv '{folderExePath}' '{bottlePath}/drive_c/Program Files'")
debPackageVersion = self.GetEXEVersion(exePath.text()) debPackageVersion = self.GetEXEVersion(exePath.text(), bottlePath)
debDescription = f"{exeName} By Deepin Wine 6 Stable And Build By Wine Runner Easy Packager" debDescription = f"{exeName} By Deepin Wine 6 Stable And Build By Wine Runner Easy Packager"
debDepends = "deepin-wine6-stable, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei" debDepends = f"{chooseWine}, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei"
self.RunCommand(f"mkdir -pv '{debBuildPath}/DEBIAN'") self.RunCommand(f"mkdir -pv '{debBuildPath}/DEBIAN'")
self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/files'") self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/files'")
self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/entries/applications'") self.RunCommand(f"mkdir -pv '{debBuildPath}/opt/apps/{debPackageName}/entries/applications'")
@ -562,7 +562,7 @@ class RunThread(QtCore.QThread):
self.RunCommand(f"chmod -Rv 755 '{debBuildPath}/opt/apps/{debPackageName}/entries/applications/'*.desktop") self.RunCommand(f"chmod -Rv 755 '{debBuildPath}/opt/apps/{debPackageName}/entries/applications/'*.desktop")
########### 打包 deb ########### 打包 deb
print(debPackageVersion) print(debPackageVersion)
self.RunCommand(f"dpkg-deb -Z xz -b '{debBuildPath}' '{desktopPath}/{debPackageName}_{debPackageVersion}_i386.deb'") self.RunCommand(f"dpkg-deb -Z xz -b '{debBuildPath}' '{desktopPath}/{debPackageName}_{debPackageVersion}_all.deb'")
self.info.emit("打包完成!") self.info.emit("打包完成!")
self.disbledAll.emit(False) self.disbledAll.emit(False)
########### 移除临时文件 ########### 移除临时文件
@ -580,6 +580,8 @@ class RunThread(QtCore.QThread):
#/home/gfdgd_xi/Downloads/XPcalc.exe #/home/gfdgd_xi/Downloads/XPcalc.exe
def RunBuildThread(): def RunBuildThread():
global buildThread global buildThread
global chooseWine
chooseWine = wineList[wineChooser.currentIndex()]
buildThread = RunThread() buildThread = RunThread()
buildThread.showLogText.connect(ShowText) buildThread.showLogText.connect(ShowText)
buildThread.error.connect(ErrorMessage) buildThread.error.connect(ErrorMessage)
@ -602,6 +604,7 @@ def BrowserExe():
if filePath[0] != "" or filePath[0] != None: if filePath[0] != "" or filePath[0] != None:
exePath.setText(filePath[0]) exePath.setText(filePath[0])
chooseWine = ""
if __name__ == "__main__": if __name__ == "__main__":
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
iconPath = "{}/deepin-wine-runner.svg".format(programPath) iconPath = "{}/deepin-wine-runner.svg".format(programPath)
@ -616,12 +619,31 @@ if __name__ == "__main__":
widget = QtWidgets.QWidget() widget = QtWidgets.QWidget()
layout = QtWidgets.QGridLayout() layout = QtWidgets.QGridLayout()
exePath = QtWidgets.QLineEdit() exePath = QtWidgets.QLineEdit()
wineChooser = QtWidgets.QComboBox()
browserExeButton = QtWidgets.QPushButton("浏览……") browserExeButton = QtWidgets.QPushButton("浏览……")
logText = QtWidgets.QTextBrowser() logText = QtWidgets.QTextBrowser()
logText.setStyleSheet(""" logText.setStyleSheet("""
background-color: black; background-color: black;
color: white; color: white;
""") """)
wineChooserList = [
"使用 Spark Wine8 打包应用",
"使用 Spark Wine7 Devel 打包应用",
"使用 Deepin Wine6 Stable 打包应用",
"使用 Deepin Wine5 Stable 打包应用",
"使用 Deepin Wine5 打包应用",
"使用 Deepin Wine2 打包应用"
]
wineChooserIndex = 0
wineList = ["spark-wine8", "spark-wine7-devel", "deepin-wine6-stable", "deepin-wine5-stable", "deepin-wine5", "deepin-wine"]
for i in range(len(wineList)):
if not os.system(f"which '{wineList[i]}'"):
wineChooserIndex = i
break
chooseWine = wineList[wineChooserIndex]
wineChooserList[wineChooserIndex] = f"{wineChooserList[wineChooserIndex]}(推荐,如无特殊需求不建议更换)"
wineChooser.addItems(wineChooserList)
wineChooser.setCurrentIndex(wineChooserIndex)
controlLayout = QtWidgets.QHBoxLayout() controlLayout = QtWidgets.QHBoxLayout()
buildButton = QtWidgets.QPushButton("现在打包……") buildButton = QtWidgets.QPushButton("现在打包……")
installCmpleteButton = QtWidgets.QPushButton("安装程序执行完成") installCmpleteButton = QtWidgets.QPushButton("安装程序执行完成")
@ -637,8 +659,9 @@ if __name__ == "__main__":
layout.addWidget(QtWidgets.QLabel("选择 EXE"), 0, 0) layout.addWidget(QtWidgets.QLabel("选择 EXE"), 0, 0)
layout.addWidget(exePath, 0, 1) layout.addWidget(exePath, 0, 1)
layout.addWidget(browserExeButton, 0, 2) layout.addWidget(browserExeButton, 0, 2)
layout.addLayout(controlLayout, 1, 1) layout.addWidget(wineChooser, 1, 1)
layout.addWidget(logText, 2, 0, 1, 3) layout.addLayout(controlLayout, 2, 1)
layout.addWidget(logText, 3, 0, 1, 3)
widget.setLayout(layout) widget.setLayout(layout)
window.setCentralWidget(widget) window.setCentralWidget(widget)
window.setWindowTitle(f"Wine 运行器 {version}——简易打包器") window.setWindowTitle(f"Wine 运行器 {version}——简易打包器")