+1=Atslgas:
+2=Vrtbas:
+3=Mapes:
+4=Faili:
+5=Laiks:
+6=Pievienots atslgas:
+7=Dzsts atslgas:
+8=Pievienots vrtbas:
+9=Dzsts vrtbas:
+10=Prveidots vrtbas:
+11=Pievienotie faili:
+12=Dzstie faili:
+13=Prveidotie faili [atribti?]:
+14=Pievienots mapes:
+15=Dzsts mapes:
+16=Prveidotie mapju atribti:
+17=Kop izmaias:
+18=Komentri:
+19=Datums, laiks:
+20=Dators:
+21=Lietotjs:
+22=Par
+23=Kda
+24=Kda izsaucot rjo apskattju!
+25=Kda izveidojot failu!
+26=Kda atverot failu!
+27=Kda prveidojot faila rdtju!
+28=&1. viens
+29=&2. viens
+30=&Saldzint
+31=&Dzst
+32=&Beigt
+33=&Par
+34=&Novrot..
+35=Saldzinanas protokolus saglabt k:
+36=Izejas ce:
+37=Pievienot komentru protokolam:
+38=&Tekstu
+39=&HTML dokumentu
+40=&Skant mapi1[;mapi2;...]:
+41=&viens
+42=aut un sa&glabt...
+43=Iel&dt...
+44=&Dzst visu
+45=Dzst &1. vienu
+46=Dzst &2. vienu
+
+
+[Portuguese]
+Translator=Leandro
+1=Chaves:
+2=Valores:
+3=Diretrios:
+4=Arquivos:
+5=Tempo:
+6=Chaves adicionadas:
+7=Chaves apagadas:
+8=Valores adicionados:
+9=Valores apagados:
+10=Valores modificados:
+11=Arquivos adicionados:
+12=Arquivos apagados:
+13=Arquivos [atributos?] modificados:
+14=Pastas adicionadas:
+15=Pastas apagadas:
+16=Atributos de pastas alterados:
+17=Total de alteraes:
+18=Comentrios:
+19=Dia/hora:
+20=Computador:
+21=Usurio:
+22=Sobre
+23=Erro
+24=Erro ao chamar visualizador externo!
+25=Erro ao criar arquivo!
+26=Erro ao abrir arquivo!
+27=Erro ao mover o ponteiro do arquivo!
+28=&1 foto
+29=&2 foto
+30=&Comparar
+31=&Limpar
+32=Sai&r
+33=&Sobre
+34=&Monitor...
+35=Salvar notas comparadas como:
+36=Destino:
+37=Adicionar comentrio em nota:
+38=&Texto
+39=&HTML
+40=&Pesquisar diretrio:
+41=&Fotografar
+42=Fotografar e &salvar...
+43=&Carregar...
+44=&Limpar tudo
+45=Apagar &1 foto
+46=Apagar &2 foto
+
+[Slovensk]
+Translator=Roland Turcan (regshot@rotursoft.sk)
+1=Klvesy:
+2=Hodnoty:
+3=Prieinky:
+4=Sbory:
+5=as:
+6=Ke pridan:
+7=Ke zmazan:
+8=Hodnoty pridan:
+9=Hodnoty zmazan:
+10=Hodnoty zmenen:
+11=Sbory pridan:
+12=Sbory zmazan:
+13=Sbory [atribty?] zmenen:
+14=Prieinky pridan:
+15=Prieinky zmazan:
+16=Atribty prieinkov zmenen:
+17=Spolu zmien:
+18=Komentre:
+19=Dtum/as:
+20=Pota:
+21=Uvate:
+22=O programe
+23=Chyba
+24=Chyba pri volan externho prehliadaa!
+25=Chyba pri vytvran sboru!
+26=Chyba pri otvoren sboru!
+27=Chyba pri presvan ukazovatea v sbore!
+28=&1. zznam
+29=&2. zznam
+30=P&orovnaj
+31=&Vyma
+32=&Koniec
+33=&O Programe
+34=&Monitor..
+35=Porovnaj zznamy a ulo ako:
+36=Vstup ulo do:
+37=Pridaj komentr do zznamu:
+38=ist &TXT
+39=&HTML dokument
+40=&Hadaj dir1[;dir2;...;dir nn]:
+41=&Zznam
+42=Zaznamenaj a ulo...
+43=Nataj...
+44=&Vyma vetko
+45=Vyma &1. zznam
+46=Vyma &2. zznam
+
+[{]
+Translator=Kentaro Okude
+1=Keys:
+2=Values:
+3=Dirs:
+4=Files:
+5=Time:
+6=ljꂽWXgL[:
+7=폜ꂽWXgL[:
+8=ljꂽl:
+9=폜ꂽl:
+10=ύX̂l:
+11=ljꂽt@C:
+12=폜ꂽt@C:
+13=iHjύX̂t@C:
+14=ljꂽtH_:
+15=폜ꂽtH_:
+16=ύX̂tH_:
+17=S̕ύX:
+18=Rg:
+19=:
+20=Rs[^:
+21=[U[l[:
+22=About
+23=G[
+24=֘AtꂽvONł܂łB
+25=t@C쐬ł܂łB
+26=t@CJ炯܂łB
+27=t@C|C^[܂łB
+28=P
+29=Q
+30=r
+31=
+32=
+33=About
+34=Ď
+35=O̕ۑ`:
+36=ۑ:
+37=OɃRg}:
+38=Text
+39=HTML
+40=ĎtH_:
+41=sI
+42=sZ[u
+43=[h
+44=ׂď
+45=Pڂ̃O
+46=Qڂ̃O
+
+[Polski]
+Translator=Adam Mikusiski
+1=Klucze:
+2=Wartoci:
+3=Katalogi:
+4=Pliki:
+5=Czas:
+6=Klucze dodane:
+7=Klucze usunite:
+8=Wartoci dodane:
+9=Wartoci usunite:
+10=Wartoci zmodyfikowane:
+11=Pliki dodane:
+12=Pliki usunite:
+13=Pliki [atrybuty?] zmodyfikowane:
+14=Katalogi dodane:
+15=Katalogi usunite:
+16=Zmienione atrybuty katalogw:
+17=Wszystkie zmiany:
+18=Komentarze:
+19=Data i godzina:
+20=Komputer:
+21=Nazwa uytkownika:
+22=O programie
+23=Bd
+24=Bd wywoania przegldarki zewntrznej!
+25=Bd tworzenia pliku!
+26=Bd otwarcia pliku!
+27=Bd przesunicia wskanika pliku!
+28=Zdjcie &1
+29=Zdjcie &2
+30=&Porwnaj
+31=W&yma
+32=&Wyjcie
+33=&O programie
+34=&Monitor..
+35=Zapisz porwnanie rejestru jako:
+36=Katalog docelowy:
+37=Dodaj komentarz do rejestru:
+38=&TXT
+39=Dokument &HTML
+40=&Skanuj kat1[;kat2;...;kat nn]:
+41=&Zdjcie
+42=Zdjcie + Za&pis...
+43=W&czytaj...
+44=W&yma wszystko
+45=Wyma zdjcie &1
+46=Wyma zdjcie &2
+
+[Serbian]
+Translator=Computer Wizard
+1=Kljuevi:
+2=Vrednosti:
+3=Direktorijumi:
+4=Fajlovi:
+5=Vreme:
+6=Dodato kljuceva:
+7=Obrisano kljuceva:
+8=Dodato vrednosti:
+9=Izbrisano vrednosti:
+10=Izmenjeno vrednosti:
+11=Dodato fajlova:
+12=Izbrisano fajlova:
+13=Fajlova [atributa?] izmenjeno:
+14=Dodato foldera:
+15=Izbrisano foldera:
+16=Promenjeno atributa foldera:
+17=Ukupno promena:
+18=Komanda:
+19=Datum i vreme:
+20=Kompjuter:
+21=Korisnicko ime:
+22=O programu
+23=Greka
+24=Greka pri pozivanju eksternog viewer-a!
+25=Greka pri kreiranju fajla!
+26=Greka pri otvaranju fajla!
+27=Greka pri promeni pokazivaa fajla!
+28=&Prvi snimak
+29=&Drugi snimak
+30=&Uporedi
+31=O&brii
+32=&Izlaz
+33=&O programu
+34=&Monitor...
+35=Rezultat poreenja snimi kao:
+36=Izlazna putanja:
+37=Dodaj komentar u log:
+38=&Tekst
+39=&HTML dokument
+40=&Skeniraj dir1[;dir2;...;dir nn]:
+41=&Snimi
+42=Snimi i sauvaj na &disku...
+43=&Uitaj...
+44=&Obrii sve
+45=Obrii prvi snimak
+46=Obrii drugi snimak
+
+[Hebrew-]
+Translator=Jack Gorji-[' ']-Email:zakgj@hotmail.com
+1=:
+2=:
+3=:
+4=:
+5=-Time:
+6= :
+7= :
+8= :
+9= :
+10= :
+11= :
+12= :
+13= :
+14= :
+15= :
+16= :
+17=" :
+18=:
+19= :
+20= :
+21= :
+22=&
+23=
+24= !
+25= !
+26= !
+27= !
+28=& '1
+29=& '2
+30=&
+31=&
+32=&
+33=&
+34=
+35=
+36= :
+37= :
+38=Plain &TXT
+39=&HTML document
+40=& dir1[;dir2;...;dir nn]:
+41=&
+42= ...
+43=...
+44= &
+45= &
+46= &
+
+[Galego]
+Translator=Xos Antn Vicente Rodrguez (antonvicente@navegalia.com)
+1=Claves:
+2=Valores:
+3=Directorios:
+4=Arquivos:
+5=Tempo:
+6=Claves engadidas:
+7=Claves borradas:
+8=Valores engadidos:
+9=Valores borrados:
+10=Valores modificados:
+11=Arquivos engadidos:
+12=Arquivos borrados:
+13=Atributos de arquivo modificados:
+14=Cartafois engadidos:
+15=Cartafois borrados:
+16=Atributos de cartafol modificados:
+17=Total de trocos:
+18=Comentarios:
+19=Data e hora:
+20=Computador:
+21=Usuario:
+22=Sobre
+23=Erro
+24=Erro ao chamar a un visor externo!
+25=Erro ao crear arquivo!
+26=Erro ao abrir arquivos!
+27=Erro ao mover punteiro de arquivo!
+28=&1ra. Foto
+29=&2da. Foto
+30=C&omparar
+31=&Limpar
+32=S&ar
+33=&Sobre
+34=&Monitor..
+35=Comparar logs gardados como:
+36=Ruta de sada:
+37=Engadir comentario ao log:
+38=&Texto
+39=Documento &HTML
+40=&Escanear dir1[;dir2;...;dir nn]
+41=&Foto
+42=Foto + &gardar...
+43=&Cargar...
+44=&Limpar
+45=Limpar &1ra. Foto
+46=Limpar &2da. Foto
+
+[Hrvatski]
+Translator=Obelix (JK875@yahoo.cu.uk)
+1=Kljuevi:
+2=Vrijednosti:
+3=Direktoriji:
+4=Datoteke:
+5=Vrijeme:
+6=Dodano kljuceva:
+7=Brisano kljuceva:
+8=Dodano vrijednosti:
+9=Brisano vrijednosti:
+10=Izmijenjeno vrijednosti:
+11=Dodano datoteka:
+12=Izbrisano datoteka:
+13=Datoteka [atributa?] izmijenjeno:
+14=Dodano pod_direktorija:
+15=Brisano pod_direktorija:
+16=Promijenjeno atributa pod_direktorija:
+17=Ukupno promjena:
+18=Komanda:
+19=Datum i vrijeme:
+20=Kompjutor:
+21=Korisniko ime:
+22=O programu
+23=Greka
+24=Greka pri pozivanju vanjskog preglednika!
+25=Greka pri kreiranju datoteke!
+26=Greka pri otvaranju datoteke!
+27=Greka pri promjeni pokazivaa datoteke!
+28=&Prvi snimak
+29=&Drugi snimak
+30=&Usporedi
+31=&Brii
+32=&Izlaz
+33=&O programu
+34=&Monitor...
+35=Rezultat usporedbe spremi kao:
+36=Izlazna putanja:
+37=Dodaj komentar u log:
+38=&Tekst
+39=&HTML dokument
+40=&Pretrai dir1[;dir2;...;dir nn]:
+41=&Snimi
+42=Snimi i spremi na &disk...
+43=&Uitaj...
+44=&Bbrii sve
+45=Brii prvi snimak
+46=Brii drugi snimak
+
+[Bulgarian]
+Translator=Alex Simidchiev
+1=:
+2=:
+3=:
+4=:
+5=:
+6= :
+7= :
+8= :
+9= :
+10= :
+11= :
+12= :
+13= []:
+14= :
+15= :
+16= []:
+17= :
+18=:
+19= :
+20= :
+21= :
+22=
+23=
+24= !
+25= !
+26= !
+27=Error move file pointer!
+28=&1
+29=&2
+30=&
+31=&
+32=&
+33=&
+34=&...
+35= :
+36= :
+37= :
+38=&
+39=& HTML
+40=& [dir1;dir2;...;dir nn]:
+41=&
+42= + ...
+43=&...
+44=&
+45= &1
+46= &2
+
+[Svenska]
+Translator=joup@algonet.se
+1=Nycklar:
+2=Vrden:
+3=Kataloger:
+4=Filer:
+5=Tid:
+6=Adderade nycklar:
+7=Borttagna nycklar:
+8=Adderade vrden:
+9=Borttagna vrden:
+10=ndrade vrden:
+11=Adderade filer:
+12=Borttagna filer:
+13=ndrade filer [attribut?]:
+14=Adderade kataloger:
+15=Borttagna kataloger:
+16=ndrade katalogattribut:
+17=Totala ndringar:
+18=Kommentarer:
+19=Datum/tid:
+20=Dator:
+21=Anvndarnamn:
+22=Om
+23=Fel
+24=Fel vid anrop av extern filvisare!
+25=Kunde inte skapa fil!
+26=Kunde inte ppna fil!
+27=Fel vid flyttning av filpekare!
+28=&1:a tagningen
+29=&2:a tagningen
+30=&Jmfr
+31=&Tm
+32=A&vsluta
+33=&Om Regshot
+34=&Bevaka..
+35=Jmfrelselog sparas som:
+36=Mlkatalog:
+37=Lgg till kommentar i loggen:
+38=Ren &TXT
+39=&HTMLdokument
+40=&Scanna dir1[;dir2;...;dir nn]:
+41=&Shot
+42=Shot och spa&ra...
+43=Ls &in...
+44=&Tm allt
+45=Tm &1:a tagningen
+46=Tm &2:a tagningen
+
+[Hungarian]
+Translator=Bata Gyrgy
+1=Kulcsok:
+2=rtkek:
+3=Mappk:
+4=Fjlok:
+5=Id:
+6=Hozzadott rendszerler kulcsok:
+7=Trlt rendszerler kulcsok:
+8=Hozzadott rendszerler rtkek:
+9=Trlt rendszerler rtkek:
+10=Mdostott rendszerler rtkek:
+11=Hozzadott fjlok:
+12=Trlt fjlok:
+13=Mdostott fjlok [attribtumok]:
+14=Hozzadott mappk:
+15=Trlt mappk:
+16=Mdostott mappa attribtumok:
+17=sszes vltozs:
+18=Megjegyzs:
+19=Dtum s id:
+20=Szmtgp:
+21=Felhasznlnv:
+22=Nvjegy
+23=Hiba
+24=Hiba a kls szerkeszt meghvsakor!
+25=Hiba a fjl ltrehozsakor!
+26=Hiba a fjl megnyitsakor!
+27=Hiba a fjlmutat mozgatsakor!
+28=&1. Minta
+29=&2. Minta
+30=&sszevets
+31=&Trls
+32=&Kilps
+33=&Nvjegy
+34=Figy&els...
+35=Naplfjl formtuma:
+36=Eredmny mentse ide:
+37=Megjegyzs a naplfjlban, fjlnv:
+38=T&XT fjl
+39=&HTML fjl
+40=&Figyelt mappk [a;b;c;...]:
+41=&Vizsglat
+42=Vizsglat s &ments...
+43=&Betlts...
+44=&Mind trlse
+45=&1. Minta trlse
+46=&2. Minta trlse
+
+[]
+Translator=Dmitry P.
+1=:
+2=:
+3=:
+4=:
+5=:
+6= :
+7= :
+8= :
+9= :
+10= :
+11= :
+12= :
+13= []:
+14= :
+15= :
+16= []:
+17= :
+18=:
+19= :
+20=' ':
+21=' :
+22=
+23=
+24= !
+25= !
+26= !
+27=Error move file pointer!
+28=1
+29=2
+30=
+31=
+32=
+33=
+34=
+35= :
+36= :
+37= :
+38=
+39= HTML
+40= 1[;dir2;...]:
+41=
+42= + ...
+43=³...
+44=
+45= 1
+46= 2
+
+[Kazakh]
+Translator=
+1=:
+2=:
+3=:
+4=:
+5=:
+6= :
+7=f o:
+8= :
+9=f :
+10= :
+11= :
+12=f :
+13= []:
+14= :
+15=f :
+16= []:
+17= :
+18= :
+19=ff :
+20= :
+21= :
+22=C
+23=
+24= !
+25= !
+26= !
+27=Error move file pointer!
+28=&1
+29=&2
+30=&
+31=&
+32=&f
+33=&C
+34=&...
+35= :
+36= :
+37= :
+38=&
+39=&HTML
+40=& 1[;dir2;...;dir nn]:
+41=&
+42= + &...
+43=&...
+44=&
+45= &1
+46= &2
+
diff --git a/deb/opt/apps/deepin-wine-runner/RegShot/regshot.exe b/deb/opt/apps/deepin-wine-runner/RegShot/regshot.exe
new file mode 100644
index 0000000..3e9527b
Binary files /dev/null and b/deb/opt/apps/deepin-wine-runner/RegShot/regshot.exe differ
diff --git a/deb/opt/apps/deepin-wine-runner/RegShot/regshot.ini b/deb/opt/apps/deepin-wine-runner/RegShot/regshot.ini
new file mode 100644
index 0000000..48e223b
--- /dev/null
+++ b/deb/opt/apps/deepin-wine-runner/RegShot/regshot.ini
@@ -0,0 +1,15 @@
+[Setup]
+Flag=1
+ExtDir=
+OutDir=
+UseLongRegHead=0
+
+[SkipRegKey]
+0=
+1=
+2=
+
+[SkipDir]
+0=
+1=
+2=
diff --git a/deb/opt/apps/deepin-wine-runner/RegShot/regshot_x64.exe b/deb/opt/apps/deepin-wine-runner/RegShot/regshot_x64.exe
new file mode 100644
index 0000000..6f0bdc1
Binary files /dev/null and b/deb/opt/apps/deepin-wine-runner/RegShot/regshot_x64.exe differ
diff --git a/deb/opt/apps/deepin-wine-runner/deepin-wine-packager.py b/deb/opt/apps/deepin-wine-runner/deepin-wine-packager.py
index 4478998..fc04b0c 100755
--- a/deb/opt/apps/deepin-wine-runner/deepin-wine-packager.py
+++ b/deb/opt/apps/deepin-wine-runner/deepin-wine-packager.py
@@ -215,7 +215,7 @@ class make_deb_threading(QtCore.QThread):
"Architecture": "i386",
"Depends": [
f"{wine[wineVersion.currentText()]}, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei",
- f"{wine[wineVersion.currentText()]}, spark-dwine-helper (>= 1.6.2), fonts-wqy-microhei, fonts-wqy-zenhei"
+ f"{wine[wineVersion.currentText()]}, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei"
][int(chooseWineHelperValue.isChecked())],
"postinst": "",
"postrm": ["", f"""#!/bin/bash
@@ -695,7 +695,7 @@ WINEPREFIX=$BOTTLE $EMU $EMU_ARGS $WINE "$EXE" --disable-gpu &""",
print("c")
if os.path.exists(wine[wineVersion.currentText()]):
debInformation[0]["Depends"] = ["deepin-wine-helper (>= 5.1.30-1)",
- "spark-dwine-helper (>= 1.6.2)"
+ "spark-dwine-helper | store.spark-app.spark-dwine-helper"
][int(chooseWineHelperValue.isChecked())] #+ ["", "libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0), ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses, deepin-wine-plugin-virtual\nRecommends: libcapi20-3, libcups2, libdbus-1-3, libfontconfig1, libfreetype6, libglu1-mesa | libglu1, libgnutls30 | libgnutls28 | libgnutls26, libgsm1, libgssapi-krb5-2, libjpeg62-turbo | libjpeg8, libkrb5-3, libodbc1, libosmesa6, libpng16-16 | libpng12-0, libsane | libsane1, libsdl2-2.0-0, libtiff5, libv4l-0, libxcomposite1, libxcursor1, libxfixes3, libxi6, libxinerama1, libxrandr2, libxrender1, libxslt1.1, libxxf86vm1"][]
print("d")
debInformation[0]["run.sh"] = f'''#!/bin/sh
@@ -849,6 +849,7 @@ fi
if os.path.exists(wine[wineVersion.currentText()]):
shutil.copy(f"{programPath}/gtkGetFileNameDlg", f"{debPackagePath}/opt/apps/{e1_text.text()}/files/gtkGetFileNameDlg")
if wine[wineVersion.currentText()][-3:] == ".7z":
+ # 都有了为什么要打包呢?
shutil.copy(wine[wineVersion.currentText()], f"{debPackagePath}/opt/apps/{e1_text.text()}/files/wine_archive.7z")
else:
self.run_command(f"7z a '{debPackagePath}/opt/apps/{e1_text.text()}/files/wine_archive.7z' '{wine[wineVersion.currentText()]}/*'")
@@ -856,7 +857,11 @@ fi
# 压缩容器
###############
self.label.emit("正在打包 wine 容器")
- self.run_command("7z a {}/opt/apps/{}/files/files.7z {}/*".format(debPackagePath, e1_text.text(), b))
+ # 都有 7z 了为什么要打包呢?
+ if e1_text.text()[-3: ] == ".7z":
+ shutil.copy(e1_text.text(), f"{debPackagePath}/opt/apps/{e1_text.text()}/files/files.7z")
+ else:
+ self.run_command("7z a {}/opt/apps/{}/files/files.7z {}/*".format(debPackagePath, e1_text.text(), b))
###############
# 复制文件
###############
@@ -1024,12 +1029,12 @@ def InstallDeb():
def ChangeWine():
useInstallWineArch.setEnabled(os.path.exists(wine[wineVersion.currentText()]))
debDepends.setText([f"{wine[wineVersion.currentText()]}, deepin-wine-helper (>= 5.1.30-1), fonts-wqy-microhei, fonts-wqy-zenhei",
- f"{wine[wineVersion.currentText()]}, spark-dwine-helper (>= 1.6.2), fonts-wqy-microhei, fonts-wqy-zenhei"
+ f"{wine[wineVersion.currentText()]}, spark-dwine-helper | store.spark-app.spark-dwine-helper, fonts-wqy-microhei, fonts-wqy-zenhei"
][int(chooseWineHelperValue.isChecked())])
debRecommend.setText("")
if os.path.exists(wine[wineVersion.currentText()]):
debDepends.setText(["deepin-wine-helper (>= 5.1.30-1)",
- "spark-dwine-helper (>= 1.6.2)"
+ "spark-dwine-helper | store.spark-app.spark-dwine-helper"
][int(chooseWineHelperValue.isChecked())])
if "deepin-wine5-stable" in wine[wineVersion.currentText()]:
debDepends.setText("libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0), ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses, deepin-wine-plugin-virtual")
@@ -1067,12 +1072,178 @@ def UserPathSet():
return
change = True
+def ReadDeb(unzip = False):
+ # 获取路径
+ debPath = QtWidgets.QFileDialog.getOpenFileName(window, "读取 deb 包", get_home(), "deb包(*.deb);;所有文件(*.*)")[0]
+ print(debPath)
+ # 分类讨论
+ path = f"/tmp/deb-unzip-{random.randint(0, 1000)}"
+ # 新建文件夹
+ os.system(f"mkdir -p '{path}'")
+ # 解包 control 文件
+ os.system(f"dpkg -e '{debPath}' '{path}/DEBIAN'")
+ # 读取 control 文件
+ file = open(f"{path}/DEBIAN/control", "r")
+ lists = file.read().splitlines()
+
+ # 控件映射表
+ lnkMap = {
+ "Package": e1_text,
+ "Version": e2_text,
+ "Description": e3_text,
+ "Maintainer": e4_text,
+ "Recommends": debRecommend,
+ "Depends": debDepends
+ }
+
+ for i in lists:
+ # 遍历文件
+ items = i.strip()
+ try:
+ lnkMap[items[:items.index(":")]].setText(items[items.index(":") + 1:].strip())
+ if unzip:
+ # 解压全部文件将不在 control 分析 wine 版本以提升运行效率
+ continue
+ print(items[:items.index(":")])
+ if items[:items.index(":")] == "Depends":
+ # 以下可以通过依赖判断使用什么 wine
+ depends = items[items.index(":") + 1:].strip().split(",")
+ for i in depends:
+ print(i)
+ # 读取
+ if "(" in i:
+ # 如果有括号(即版本号限制的情况)
+ temp = i.strip()
+ dependsItem = temp[:temp.index("(")]
+ else:
+ dependsItem = i.strip()
+ try:
+ # 这个 wine 是理论上用于运行的 wine
+ print(wineValue[dependsItem])
+ wineVersion.setCurrentText(wineValue[dependsItem])
+ break
+ except:
+ print("此 Wine 不存在")
+ except:
+ # 报错忽略
+ print(f"“{items}”项忽略")
+
+ # 判断 postrm 文件是不是自动移除脚本
+ # postrm 文件不存在就不需要考虑
+ # 三个特征:
+ # 1、/home/$username/.deepinwine
+ # 2、非卸载,跳过清理
+ # 3、清理卸载残留
+ # 都符合才算
+ rmBash.setChecked(False)
+ if os.path.exists(f"{path}/DEBIAN/postrm"):
+ # 读取文件进行特征筛查
+ file = open(f"{path}/DEBIAN/postrm", "r")
+ postrm = file.read()
+ if "/home/$username/.deepinwine" in postrm and "非卸载,跳过清理" in postrm and "清理卸载残留" in postrm:
+ rmBash.setChecked(True)
+ file.close()
+ # 解包主文件
+ if not unzip:
+ # 只解压 control 文件的话,结束
+ # 顺便删除临时文件
+ os.system(f"rm -rfv '{path}'")
+ return
+ os.system(f"dpkg -x '{debPath}' '{path}'")
+ # 读取文件
+ # 目前只能实现读取 Wine 运行器(生态适配脚本的也可以读取)打包的 deb
+ # opt/apps/XXX/files/run.sh 的文件读取识别
+ if not os.path.exists(f"{path}/opt/apps/"):
+ return
+ # 取默认第一个
+ package = os.listdir(f"{path}/opt/apps/")[0]
+ # 读 7z(基本不读取)
+ if os.path.exists(f"{path}/opt/apps/{package}/files/files.7z"):
+ e6_text.setText(f"{path}/opt/apps/{package}/files/files.7z")
+ lnkMap = {
+ "Icon": e9_text,
+ "Name": e8_text,
+ "MimeType": e10_text
+ }
+ # 读 desktop 文件
+ if os.path.exists(f"{path}/opt/apps/{package}/entries/applications"):
+ filePath = f"{path}/opt/apps/{package}/entries/applications/{os.listdir(f'{path}/opt/apps/{package}/entries/applications')[0]}"
+ file = open(filePath, "r")
+ items = file.read().splitlines()
+ file.close()
+ for i in items:
+ # 按行解析
+ if i.replace(" ", "").replace("\n", "") == "":
+ # 空行,忽略
+ continue
+ # 忽略注释
+ line = i
+ if "#" in line:
+ line = line[:line.index("#")]
+ # 判断是否合法
+ try:
+ name = line[:line.index("=")].strip()
+ value = line[line.index("=") + 1:]#.replace("\"", "").strip()
+ if name in lnkMap:
+ lnkMap[name].setText(value)
+ continue
+ # 其它的特殊情况判断
+ if name == "Exec":
+ value = value[value.index(".sh") + 3:].strip()
+ if value[0] == "\"":
+ value = value[1:].strip()
+ # helper
+ e15_text.setText(value)
+ if name == "Categories":
+ option1_text.setCurrentText(value)
+ except:
+ print(f"忽略行:{i}")
+ lnkMap = {
+ "BOTTLENAME": e5_text,
+ "EXEC_PATH": e7_text
+ #"APPRUN_CMD"
+ }
+ # 读 run.sh
+ if os.path.exists(f"{path}/opt/apps/{package}/files/run.sh"):
+ file = open(f"{path}/opt/apps/{package}/files/run.sh", "r")
+ items = file.read().splitlines()
+ file.close()
+ for i in items:
+ # 按行解析
+ if i.replace(" ", "").replace("\n", "") == "":
+ # 空行,忽略
+ continue
+ # 忽略 export
+ line = i.replace("export ", "")
+ # 忽略注释
+ if "#" in line:
+ line = line[:line.index("#")]
+ # 判断是否合法
+ try:
+ name = line[:line.index("=")].strip()
+ value = line[line.index("=") + 1:].replace("\"", "").strip()
+ #lnkMap[name].setText(value)
+ if name in lnkMap:
+ lnkMap[name].setText(value)
+ continue
+ # 其它的特殊情况判断
+ if name == "START_SHELL_PATH" and value == "/opt/deepinwine/tools/spark_run_v4.sh":
+ # helper
+ chooseWineHelperValue.setChecked(True)
+ if name == "APPRUN_CMD" and value in wineValue:
+ wineVersion.setCurrentText(wineValue[dependsItem])
+ except:
+ print(f"忽略行:{i}")
+
+
+
###############
# 程序信息
###############
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
# 如果要添加其他 wine,请在字典添加其名称和执行路径
wine = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5 stable": "deepin-wine5-stable", "deepin-wine6 stable": "deepin-wine6-stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine"}
+wineValue = {"deepin-wine": "deepin-wine", "deepin-wine5": "deepin-wine5", "wine": "wine", "wine64": "wine64", "deepin-wine5-stable": "deepin-wine5 stable", "deepin-wine6-stable": "deepin-wine6 stable", "spark-wine7-devel": "spark-wine7-devel", "ukylin-wine": "ukylin-wine"}
# 读取 wine 本地列表
for i in ["/opt/wine-staging", "/opt/wine-dev", "/opt/wine-stable", "/opt/spark-wine7-devel"]:
if os.path.exists(i):
@@ -1228,12 +1399,19 @@ e12_text.textChanged.connect(UserPathSet)
# 菜单栏
menu = window.menuBar()
programmenu = menu.addMenu(QtCore.QCoreApplication.translate("U", "程序"))
+debMenu = menu.addMenu(QtCore.QCoreApplication.translate("U", "deb 包"))
help = menu.addMenu(QtCore.QCoreApplication.translate("U", "帮助"))
exit = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "退出程序"))
+debE = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "只读取 Control 信息"))
+debX = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "读取所有(需解包,时间较久)"))
tip = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "小提示"))
exit.triggered.connect(window.close)
tip.triggered.connect(helps)
programmenu.addAction(exit)
+debMenu.addAction(debE)
+debMenu.addAction(debX)
+debE.triggered.connect(lambda: ReadDeb(False))
+debX.triggered.connect(lambda: ReadDeb(True))
help.addAction(tip)
# 控件配置
try:
@@ -1249,4 +1427,5 @@ window.setWindowTitle(f"wine 应用打包器 {version}")
window.setWindowIcon(QtGui.QIcon(iconPath))
window.resize(int(window.frameSize().width() * 2.1), window.frameSize().height())
window.show()
-sys.exit(app.exec_())
\ No newline at end of file
+sys.exit(app.exec_())
+# Flag:解包只读control和解包全部读取
\ No newline at end of file
diff --git a/deb/opt/apps/deepin-wine-runner/deepin-wine-runner b/deb/opt/apps/deepin-wine-runner/deepin-wine-runner
index a801118..f114df5 100755
--- a/deb/opt/apps/deepin-wine-runner/deepin-wine-runner
+++ b/deb/opt/apps/deepin-wine-runner/deepin-wine-runner
@@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行
#################################################################################################################
# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢
-# 版本:2.0.0
-# 更新时间:2022年08月12日
+# 版本:2.2.0
+# 更新时间:2022年09月24日
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 Python3 的 PyQt5 构建
#################################################################################################################
@@ -18,11 +18,11 @@ import base64
import shutil
import hashlib
import platform
-import req as requests
import threading
import traceback
import webbrowser
import subprocess
+import req as requests
import urllib.parse as parse
import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore
@@ -36,7 +36,7 @@ def PythonLower():
# Python 版本检测,因为 f-string 格式化要至少 Python 3.6 及以上的版本,所以需要检测
# 判断主版本号
-if sys.version_info[0] > 3:
+if sys.version_info[0] < 3:
PythonLower()
if sys.version_info[1] < 6:
PythonLower()
@@ -128,6 +128,7 @@ class QT:
e1.setEditText(findExeHistory[-1])
def DisableButton(things):
+ button_r_6.setDisabled(things)
button1.setDisabled(things)
button2.setDisabled(things)
button3.setDisabled(things)
@@ -166,15 +167,7 @@ class Runexebutton_threading(QtCore.QThread):
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = ""
- if o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
- os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'")
- if not os.path.exists(f"{programPath}/exagear"):
- #self.run_command(f"aria2c -x 16 -s 16 -d \"{programPath}\" -o \"exagear.7z\" https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/other/exagear.7z")
- if os.system(f"7z x \"{programPath}/exagear.7z\" -o\"{programPath}\""):
- QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
- return
- os.remove(f"{programPath}/exagear.7z")
- if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
+ if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@@ -295,7 +288,7 @@ def make_desktop_on_launcher():
else:
option += "WINEDEBUG=FIXME,ERR,WARN,TRACE,Message "
wineUsingOption = ""
- if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
+ if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@@ -357,7 +350,7 @@ def make_desktop_on_desktop():
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = ""
- if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
+ if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@@ -484,7 +477,7 @@ class RunWineProgramThread(QtCore.QThread):
os.system(f"'{programPath}/deepin-wine-runner-create-botton.py' '{wineBottonPath}'")
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = ""
- if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
+ if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@@ -548,7 +541,7 @@ class RunWinetricksThread(QtCore.QThread):
wineUsingOption = ""
if o1.currentText() == "基于 exagear 的 deepin-wine6-stable" or o1.currentText() == "基于 box86 的 deepin-wine6-stable":
wineUsingOption = ""
- if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
+ if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@@ -581,7 +574,7 @@ def RunWinetricks():
if not CheckProgramIsInstall(wine[o1.currentText()]) and not o1.currentText() in untipsWine:
DisableButton(False)
return
- if o1.currentText() == "基于 box86 的 deepin-wine6-stable":
+ if o1.currentText() == "基于 box86 的 deepin-wine6-stable" or o1.currentText() == "基于 exagear 的 deepin-wine6-stable":
if not os.path.exists(f"{programPath}/dlls-arm"):
if os.system(f"7z x \"{programPath}/dlls-arm.7z\" -o\"{programPath}\""):
QtWidgets.QMessageBox(widget, "错误", "无法解压资源")
@@ -815,17 +808,30 @@ class UpdateWindow():
ok.clicked.connect(UpdateWindow.Update)
cancel = QtWidgets.QPushButton("取消")
cancel.clicked.connect(UpdateWindow.update.close)
- try:
- UpdateWindow.data = json.loads(requests.get(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL3VwZGF0ZS5qc29u").decode("utf-8")).text)
- versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本:{UpdateWindow.data['Version']}\n更新内容:")
- if UpdateWindow.data["Version"] == version:
- updateText.setText(QtCore.QCoreApplication.translate("U", "此为最新版本,无需更新"))
+ if "从源码运行的版本" == programVersionType:
+ versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本:未知(从源码运行不提供更新)\n更新内容:")
+ updateText.setText("从源码运行不提供更新")
+ ok.setDisabled(True)
+ else:
+ if "deepin/UOS 应用商店版本<带签名>" == programVersionType:
+ url = "aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci91cGRhdGUtdW9zLmpzb24="
+ elif "星火应用商店版本" == programVersionType:
+ url = "aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci91cGRhdGUtc3BhcmsuanNvbg=="
+ else:
+ url = "aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci91cGRhdGUuanNvbg=="
+ try:
+ UpdateWindow.data = json.loads(requests.get(base64.b64decode(url).decode("utf-8")).text)
+ versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本:{UpdateWindow.data['Version']}\n更新内容:")
+ if UpdateWindow.data["Version"] == version:
+ updateText.setText(QtCore.QCoreApplication.translate("U", "此为最新版本,无需更新"))
+ ok.setDisabled(True)
+ else:
+ updateText.setText(UpdateWindow.data["New"].replace("\\n", "\n"))
+ except:
+ traceback.print_exc()
+ QtWidgets.QMessageBox.critical(updateWidget, QtCore.QCoreApplication.translate("U", "错误"), QtCore.QCoreApplication.translate("U", "无法连接服务器!"))
+ updateText.setText("无法连接服务器,无法更新")
ok.setDisabled(True)
- else:
- updateText.setText(UpdateWindow.data["New"].replace("\\n", "\n"))
- except:
- traceback.print_exc()
- QtWidgets.QMessageBox.critical(updateWidget, QtCore.QCoreApplication.translate("U", "错误"), QtCore.QCoreApplication.translate("U", "无法连接服务器!"))
updateWidgetLayout.addWidget(versionLabel, 0, 0, 1, 1)
updateWidgetLayout.addWidget(updateText, 1, 0, 1, 3)
updateWidgetLayout.addWidget(ok, 2, 2, 1, 1)
@@ -1138,22 +1144,51 @@ class GetDllFromWindowsISO:
traceback.print_exc()
QtWidgets.QMessageBox.critical(GetDllFromWindowsISO.message, "错误", traceback.format_exc())
+choose = None
class ProgramRunStatusShow():
msgWindow = None
def ShowWindow():
+ global choose
+ choose = None
+ dateVersion = ""
if not os.path.exists(e2.currentText()):
QtWidgets.QMessageBox.information(widget, "提示", "您输入的 exe 不存在")
return
try:
sha = ProgramRunStatusUpload.GetSHA1(e2.currentText())
- lists = json.loads(requests.get(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL2FwcC8=").decode("utf-8") + sha + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).text)
- r = requests.get(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL2FwcC8=").decode("utf-8") + sha + base64.b64decode("L3RpdGxlLnR4dA==").decode("utf-8"))
+ lists = json.loads(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9hcHAv").decode("utf-8") + sha + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).text)
+ r = requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9hcHAv").decode("utf-8") + sha + base64.b64decode("L3RpdGxlLnR4dA==").decode("utf-8"))
r.encoding = "utf-8"
title = r.text
except:
- if QtWidgets.QMessageBox.question(widget, QtCore.QCoreApplication.translate("U", "提示"), QtCore.QCoreApplication.translate("U", "暂时还没有该软件的运行情况信息\n是否自己上传该软件的运行情况?")) == QtWidgets.QMessageBox.Yes:
+ choosemsg = QtWidgets.QMessageBox()
+ choosemsg.setText("""暂时还没有该软件的运行情况信息,请问需要?""")
+ choosemsg.setWindowTitle("提示")
+ def Choose(choices):
+ global choose
+ choose = choices
+ choosemsg.addButton("取消", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(0))
+ choosemsg.addButton("提交评分", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(1))
+ choosemsg.addButton("预测评分(不准确)", QtWidgets.QMessageBox.ActionRole).clicked.connect(lambda: Choose(2))
+ choosemsg.exec_()
+ if choose == None or choose == 0:
+ return
+ if choose == 1:
ProgramRunStatusUpload.ShowWindow(sha)
- return
+ return
+ if choose == 2:
+ try:
+ lists = [0, 0, 0, 0, 0, 0, 0, 0]
+ info = json.loads(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUwL0FJP1NIQTE9").decode("utf-8") + sha).text)
+ lists[int(info["Fen"])] = 1
+ dateVersion = info["Version"]
+ title = "null"
+ except:
+ traceback.print_exc()
+ QtWidgets.QMessageBox.critical(window, "错误", "无法获取预测数值")
+ return
+
+
informationList = [
"0分:无法运行并且也没有报错,自己无法解决",
"1分:无法运行但有报错,自己无法解决",
@@ -1164,7 +1199,10 @@ class ProgramRunStatusShow():
"含有不良内容,不宜安装",
"含有病毒、木马等对计算机有害的软件"
]
- if title.lower() == "null":
+ try:
+ if title.lower() == "null":
+ title = "未知应用"
+ except:
title = "未知应用"
maxHead = lists.index(max(lists))
ProgramRunStatusShow.msgWindow = QtWidgets.QMainWindow()
@@ -1176,7 +1214,8 @@ class ProgramRunStatusShow():
msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "综合评价:")), 0, 0)
msgWidgetLayout.addLayout(starLayout, 0, 1)
msgWidgetLayout.addWidget(QtWidgets.QLabel(informationList[maxHead]), 1, 0, 1, 2)
- msgWidgetLayout.addWidget(uploadButton, 2, 0, 1, 2)
+ msgWidgetLayout.addWidget(QtWidgets.QLabel("" if dateVersion == "" else f"数据版本:{dateVersion}"), 2, 0, 1, 2)
+ msgWidgetLayout.addWidget(uploadButton, 3, 0, 1, 2)
end = 5
if maxHead > 5:
for i in range(end):
@@ -1542,7 +1581,7 @@ programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
try:
wine = {
"基于 box86 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 /opt/deepin-wine6-stable/bin/wine ",
- "基于 exagear 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/exagear' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ",
+ "基于 exagear 的 deepin-wine6-stable": f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- /opt/deepin-wine6-stable/bin/wine ",
"deepin-wine6 stable": "deepin-wine6-stable",
"deepin-wine5 stable": "deepin-wine5-stable",
"spark-wine7-devel": "spark-wine7-devel",
@@ -1585,7 +1624,7 @@ try:
value = f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib BOX86_NOSIGSEGV=1 /opt/deepin-box86/box86 "
if os.path.exists("/opt/exagear/bin/ubt_x64a64_al"):
name = "基于 exagear 的 "
- value = f"WINEPREDLL='{programPath}/exagear' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- "
+ value = f"WINEPREDLL='{programPath}/dlls-arm' WINEDLLPATH=/opt/deepin-wine6-stable/lib /opt/exagear/bin/ubt_x64a64_al --path-prefix {get_home()}/.deepinwine/debian-buster --utmp-paths-list {get_home()}/.deepinwine/debian-buster/.exagear/utmp-list --vpaths-list {get_home()}/.deepinwine/debian-buster/.exagear/vpaths-list --opaths-list {get_home()}/.deepinwine/debian-buster/.exagear/opaths-list --smo-mode fbase --smo-severity smart --fd-limit 8192 --foreign-ubt-binary /opt/exagear/bin/ubt_x32a64_al -- "
except:
pass
if os.path.exists(f"{programPath}/wine/{i}/bin/wine"):
@@ -1627,9 +1666,91 @@ except:
QtWidgets.QMessageBox.critical(None, "错误", f"无法读取配置,无法继续\n{traceback.format_exc()}")
sys.exit(1)
+def getFileFolderSize(fileOrFolderPath):
+ """get size for file or folder"""
+ totalSize = 0
+ if not os.path.exists(fileOrFolderPath):
+ return totalSize
+ if os.path.isfile(fileOrFolderPath):
+ totalSize = os.path.getsize(fileOrFolderPath) # 5041481
+ return totalSize
+ if os.path.isdir(fileOrFolderPath):
+ with os.scandir(fileOrFolderPath) as dirEntryList:
+ for curSubEntry in dirEntryList:
+ curSubEntryFullPath = os.path.join(fileOrFolderPath, curSubEntry.name)
+ if curSubEntry.is_dir():
+ curSubFolderSize = getFileFolderSize(curSubEntryFullPath) # 5800007
+ totalSize += curSubFolderSize
+ elif curSubEntry.is_file():
+ curSubFileSize = os.path.getsize(curSubEntryFullPath) # 1891
+ totalSize += curSubFileSize
+ return totalSize
+
# 获取当前语言
def get_now_lang()->"获取当前语言":
return os.getenv('LANG')
+
+def GetVersion():
+ global about
+ global programVersionType
+ # 目前分为几个版本(在 control 文件区分):
+ # 星火版本:~spark
+ # 商店版本:~uos
+ # 编译版本:无版本号
+ # Gitee/Github……:正常版本
+ programVersionTypeLnk = {
+ "spark": "星火应用商店版本",
+ "uos": "deepin/UOS 应用商店版本<带签名>"
+ }
+ programVersionType = "从源码运行的版本"
+ try:
+ if not os.path.exists("/var/lib/dpkg/status"):
+ print("无 dpkg,结束")
+ file = open("/var/lib/dpkg/status", "r")
+ fileName = file.read().splitlines()
+ package = False
+ for i in range(0, len(fileName)):
+ if fileName[i] == "Package: spark-deepin-wine-runner-52":
+ programVersionType = "吾爱专版"
+ window.setWindowTitle(f"{title} 吾爱专版")
+ break
+ if fileName[i] == "Package: spark-deepin-wine-runner":
+ package = True
+ continue
+ if not package:
+ continue
+ if fileName[i].replace(" ", "").replace("\n", "") == "":
+ # 空行,不再考虑
+ break
+ # 搜索版本号
+ try:
+ if fileName[i][:fileName[i].index(":")] == "Version":
+ version = fileName[i][fileName[i].index(":") + 1:].strip()
+ print(f"版本号为:{version}")
+ if not "-" in version:
+ programVersionType = "从Gitee/Github/Gitlink等平台获取的版本"
+ break
+ programVersionType = version[version.index("-") + 1:]
+ print(programVersionType)
+ if "-" in programVersionType:
+ # 考虑到如 2.1.0-2-spark 的情况
+ programVersionType = programVersionType[programVersionType.index("-") + 1:]
+ try:
+ programVersionType = programVersionTypeLnk[programVersionType]
+ except:
+ programVersionType = "从Gitee/Github/Gitlink等平台获取的版本"
+ break
+ except:
+ traceback.print_exc()
+ continue
+ except:
+ print("无法读取,当没有处理")
+ print(programVersionType)
+ about = about.replace("@VersionForType@", programVersionType)
+ # 获取程序体积
+ about = about.replace("@programSize@", str(int(getFileFolderSize(programPath) / 1024 / 1024)))
+
+programVersionType = ""
print(wine)
###########################
# 程序信息
@@ -1665,16 +1786,25 @@ updateThingsString = '''※1、Dll 提取工具支持 NT 6.X 及以上版本的
※5、修复无法正常评分的问题
※6、修复 QQ、TIM 安装后无法正常生成快捷方式的问题
※7、基于生态适配活动的打包器更换为 spark-wine-helper 以及添加自动删除残留脚本
-8、更新组件安装的离线列表
-9、不再强制依赖深度终端,只做推荐安装
+※8、打包器支持从 deb 文件读取信息
+※9、修复在 UOS 专业版(鲲鹏)无法正常运行的问题以及组件安装功能无法正常执行安装命令的问题
+※10、修复出现星火应用商店和官方应用商店反复提示更新死循环的问题
+※11、新增评分分数预测功能(不准)
+※12、更换程序接口
+13、更新组件安装的离线列表
+14、不再强制依赖深度终端,只做推荐安装
+15、基于生态活动适配脚本的打包器在打包完成后会弹出对话框提示打包完成
+16、优化打包器的 spark wine helper 依赖设置方式
+17、新增 RegShot(注册表比对工具)
+18、添加 Wine 运行器评分数据的搜索功能
以下更新内容旧版本也适用(只限 2.1.0 及以上版本)
-※1、在“安装更多Wine”的Wine安装工具中上 wine-staging 7.17、wine-staging 6.7、spark-wine7-devel 7.17
+※1、在“安装更多Wine”的Wine安装工具中上新 Wine
※2、云 Dll 工具上新 Dll
-※3、VCPP 运行库安装工具新增 VC6 运行库
+※3、VCPP、net 运行库安装工具新增运行库
'''
for i in information["Thank"]:
thankText += f"{i}\n"
-updateTime = "2022年09月11日"
+updateTime = "2022年09月24日"
about = f'''关于
一个能让Linux用户更加方便运行Windows应用的程序,内置了对wine图形化的支持和各种Wine工具和自制Wine程序打包器、运行库安装工具等等
同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具,可以做到只需要用户下载系统镜像并点击安装即可,无需顾及虚拟机安装、创建、虚拟机的分区等等
@@ -1686,9 +1816,10 @@ about = f'''关于
让你可以简易方便的使用 wine
版本:{version}
-适用平台:{goodRunSystem}
+适用平台:{goodRunSystem}(@VersionForType@)
Qt 版本:{QtCore.qVersion()}
-程序官网:{programUrl}
+程序官网:{programUrl}
+程序占用体积:@programSize@MB
谢明名单
{thankText}
@@ -1705,7 +1836,7 @@ Qt 版本:{QtCore.qVersion()}
title = "Wine 运行器 {}".format(version)
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
try:
- threading.Thread(target=requests.get, args=[parse.unquote(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL29wZW4vSW5zdGFsbC5waHA=").decode("utf-8")) + "?Version=" + version]).start()
+ threading.Thread(target=requests.get, args=[parse.unquote(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9vcGVuL0luc3RhbGwucGhw").decode("utf-8")) + "?Version=" + version]).start()
except:
pass
iconListUnBuild = [
@@ -1740,6 +1871,9 @@ if not get_now_lang() == "zh_CN.UTF-8":
trans.load(f"{programPath}/LANG/deepin-wine-runner-en_US.qm")
app.installTranslator(trans)
window = QtWidgets.QMainWindow()
+window.setWindowTitle(title)
+# 异同步获取信息
+threading.Thread(target=GetVersion).start()
widget = QtWidgets.QWidget()
window.setCentralWidget(widget)
mainLayout = QtWidgets.QGridLayout()
@@ -1832,8 +1966,8 @@ programManager.addWidget(wineConfig, 3, 0, 1, 1)
fontAppStore = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "字体商店"))
fontAppStore.clicked.connect(FontAppStore)
programManager.addWidget(fontAppStore, 3, 2, 1, 1)
-button_r_6 = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "安装自定义字体"))
-button_r_6.clicked.connect(OpenWineFontPath)
+button_r_6 = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "RegShot"))
+button_r_6.clicked.connect(lambda: RunWineProgram(f"{programPath}/RegShot/regshot.exe"))
programManager.addWidget(button_r_6, 3, 4, 1, 1)
sparkWineSetting = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "星火wine配置"))
sparkWineSetting.clicked.connect(lambda: threading.Thread(target=os.system, args=["/opt/durapps/spark-dwine-helper/spark-dwine-helper-settings/settings.sh"]).start())
@@ -2126,7 +2260,6 @@ hm1_1.triggered.connect(lambda: webbrowser.open_new_tab("https://gitee.com/gfdgd
# 窗口设置
window.resize(widget.frameGeometry().width() * 2, widget.frameGeometry().height())
widget.setLayout(mainLayout)
-window.setWindowTitle(title)
window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg"))
widget.show()
window.show()
diff --git a/deb/opt/apps/deepin-wine-runner/dlls-arm.7z b/deb/opt/apps/deepin-wine-runner/dlls-arm.7z
index 55d907a..ee5bc4d 100644
Binary files a/deb/opt/apps/deepin-wine-runner/dlls-arm.7z and b/deb/opt/apps/deepin-wine-runner/dlls-arm.7z differ
diff --git a/deb/opt/apps/deepin-wine-runner/information.json b/deb/opt/apps/deepin-wine-runner/information.json
index 3e6e3f2..4e5a9a4 100755
--- a/deb/opt/apps/deepin-wine-runner/information.json
+++ b/deb/opt/apps/deepin-wine-runner/information.json
@@ -1,5 +1,5 @@
{
- "Version": "2.2.0-Alpha3",
+ "Version": "2.2.0",
"Thank": [
"感谢 @a2035274 @虚幻的早晨 https://bbs.deepin.org/post/238301",
"感谢 @zhangs https://bbs.deepin.org/post/227948",
@@ -23,6 +23,10 @@
"感谢 @云的眼泪 @zhengjl 反馈的 2.0.0 发布忘记把安装包传蓝奏云的问题",
"感谢 @虚幻的早晨 提出的添加 DXVK、VKD3D 的功能(VKD3D 暂未实现)",
"感谢 @以勒 修改 Dll 提取工具提示文本的建议",
+ "感谢 @历山居士 反馈的获取自动配置容器脚本工具无法正常加载数据的问题",
+ "感谢 @Nick @奋斗ing 反馈的 2.1.0-2 的快捷方式故障",
+ "感谢 @俊生鹏程 反馈的 2.1.0-2 及以前版本在鲲鹏运行 wine 错误的问题并积极测试,以及组件安装工具在 arm 架构的异常",
+ "感谢 @云的眼泪 反馈的 2.1.0-2 更新死循环的问题,可见:https://bbs.deepin.org/post/243241,以及感谢 @神末shenmo @忘记、过去 和 @历山居士 的讨论",
"感谢统信在 Wine 生态适配活动中提供的打包脚本",
"也感谢 DXVK 的开发者开发了 DXVK 这个程序,项目链接:https://github.com/doitsujin/dxvk",
"也感谢 WineHQ 开发团队开发的 WineHQ,项目网址:https://dl.winehq.org/",
diff --git a/deb/opt/apps/deepin-wine-runner/package-script.zip b/deb/opt/apps/deepin-wine-runner/package-script.zip
index bd1779a..add44e3 100755
Binary files a/deb/opt/apps/deepin-wine-runner/package-script.zip and b/deb/opt/apps/deepin-wine-runner/package-script.zip differ
diff --git a/deb/opt/apps/deepin-wine-runner/req/__init__.py b/deb/opt/apps/deepin-wine-runner/req/__init__.py
new file mode 100644
index 0000000..37115bd
--- /dev/null
+++ b/deb/opt/apps/deepin-wine-runner/req/__init__.py
@@ -0,0 +1,33 @@
+# 此库用于实现 52 版不连接程序服务器
+import requests
+
+unConnect = False
+with open("/var/lib/dpkg/status", "r") as i:
+ unConnect = "Package: spark-deepin-wine-runner-52" in open("/var/lib/dpkg/status", "r").read()
+if unConnect:
+ print("52专版,将会无法连接服务器")
+
+badUrl = [
+ "http://120.25.153.144",
+ "https://304626p927.goho.co",
+ "https://30x46269h2.goho.co"
+]
+
+class Respon:
+ text = ""
+
+def get(url): # -> requests.Response:
+ if unConnect:
+ # 筛选 Url,只有特定的 url 才会被拦截
+ for i in badUrl:
+ if i in url:
+ raise Exception("52专版不支持连接作者服务器")
+ return requests.get(url)
+
+def post(url, data):
+ if unConnect:
+ # 筛选 Url,只有特定的 url 才会被拦截
+ for i in badUrl:
+ if i in url:
+ raise Exception("52专版不支持连接作者服务器")
+ return requests.post(url, data)
\ No newline at end of file
diff --git a/deb/opt/apps/deepin-wine-runner/req/__pycache__/__init__.cpython-37.pyc b/deb/opt/apps/deepin-wine-runner/req/__pycache__/__init__.cpython-37.pyc
new file mode 100644
index 0000000..68a4567
Binary files /dev/null and b/deb/opt/apps/deepin-wine-runner/req/__pycache__/__init__.cpython-37.pyc differ
diff --git a/deb/opt/apps/deepin-wine-runner/wine/installwine b/deb/opt/apps/deepin-wine-runner/wine/installwine
index 9690184..2dae947 100755
--- a/deb/opt/apps/deepin-wine-runner/wine/installwine
+++ b/deb/opt/apps/deepin-wine-runner/wine/installwine
@@ -14,7 +14,7 @@ import shutil
import sys
import json
import traceback
-import req as requests
+import requests
from PyQt5 import QtCore, QtGui, QtWidgets
# UI 布局(自动生成)
diff --git a/information.json b/information.json
index d9f1194..4e5a9a4 100755
--- a/information.json
+++ b/information.json
@@ -25,7 +25,7 @@
"感谢 @以勒 修改 Dll 提取工具提示文本的建议",
"感谢 @历山居士 反馈的获取自动配置容器脚本工具无法正常加载数据的问题",
"感谢 @Nick @奋斗ing 反馈的 2.1.0-2 的快捷方式故障",
- "感谢 @俊生鹏程 反馈的 2.1.0-2 及以前版本在鲲鹏运行 wine 错误的问题并积极测试",
+ "感谢 @俊生鹏程 反馈的 2.1.0-2 及以前版本在鲲鹏运行 wine 错误的问题并积极测试,以及组件安装工具在 arm 架构的异常",
"感谢 @云的眼泪 反馈的 2.1.0-2 更新死循环的问题,可见:https://bbs.deepin.org/post/243241,以及感谢 @神末shenmo @忘记、过去 和 @历山居士 的讨论",
"感谢统信在 Wine 生态适配活动中提供的打包脚本",
"也感谢 DXVK 的开发者开发了 DXVK 这个程序,项目链接:https://github.com/doitsujin/dxvk",
diff --git a/mainwindow.py b/mainwindow.py
index 1d67118..f114df5 100755
--- a/mainwindow.py
+++ b/mainwindow.py
@@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行
#################################################################################################################
# 作者:gfdgd xi、为什么您不喜欢熊出没和阿布呢
-# 版本:2.0.0
-# 更新时间:2022年08月12日
+# 版本:2.2.0
+# 更新时间:2022年09月24日
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 Python3 的 PyQt5 构建
#################################################################################################################
@@ -1787,14 +1787,16 @@ updateThingsString = '''※1、Dll 提取工具支持 NT 6.X 及以上版本的
※6、修复 QQ、TIM 安装后无法正常生成快捷方式的问题
※7、基于生态适配活动的打包器更换为 spark-wine-helper 以及添加自动删除残留脚本
※8、打包器支持从 deb 文件读取信息
-※9、修复在 UOS 专业版(鲲鹏)无法正常运行的问题
+※9、修复在 UOS 专业版(鲲鹏)无法正常运行的问题以及组件安装功能无法正常执行安装命令的问题
※10、修复出现星火应用商店和官方应用商店反复提示更新死循环的问题
※11、新增评分分数预测功能(不准)
-12、更新组件安装的离线列表
-13、不再强制依赖深度终端,只做推荐安装
-14、基于生态活动适配脚本的打包器在打包完成后会弹出对话框提示打包完成
-15、优化打包器的 spark wine helper 依赖设置方式
-16、新增 RegShot(注册表比对工具)
+※12、更换程序接口
+13、更新组件安装的离线列表
+14、不再强制依赖深度终端,只做推荐安装
+15、基于生态活动适配脚本的打包器在打包完成后会弹出对话框提示打包完成
+16、优化打包器的 spark wine helper 依赖设置方式
+17、新增 RegShot(注册表比对工具)
+18、添加 Wine 运行器评分数据的搜索功能
以下更新内容旧版本也适用(只限 2.1.0 及以上版本)
※1、在“安装更多Wine”的Wine安装工具中上新 Wine
※2、云 Dll 工具上新 Dll
@@ -1802,7 +1804,7 @@ updateThingsString = '''※1、Dll 提取工具支持 NT 6.X 及以上版本的
'''
for i in information["Thank"]:
thankText += f"{i}\n"
-updateTime = "2022年09月22日"
+updateTime = "2022年09月24日"
about = f'''关于
一个能让Linux用户更加方便运行Windows应用的程序,内置了对wine图形化的支持和各种Wine工具和自制Wine程序打包器、运行库安装工具等等
同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具,可以做到只需要用户下载系统镜像并点击安装即可,无需顾及虚拟机安装、创建、虚拟机的分区等等
diff --git a/package-script.zip b/package-script.zip
index bd1779a..add44e3 100755
Binary files a/package-script.zip and b/package-script.zip differ