mirror of
https://gitee.com/gfdgd-xi/deep-wine-runner
synced 2025-01-13 10:08:28 +08:00
简易打包器支持选择wine版本
This commit is contained in:
parent
a5d1a04573
commit
59ec3d5822
@ -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}——简易打包器")
|
||||||
|
Loading…
Reference in New Issue
Block a user