關(guān)于打包
pyqt5程序,很多人一直用pyinstaller打包,我也一直在用,可以打成【單個(gè)exe可執(zhí)行文件】,也可以打成【免安裝綠色文件夾】。
相關(guān)pyinstaller的文章教程網(wǎng)上很多,大家自行搜索,我自己也寫過幾篇,大家可以參考下:
《【爬坑】python3+pyqt5+pyinstaller的各種問題》
《pyinstaller利用spec文件打包的使用模板》
關(guān)于更新
軟件更新 ,常見多是Update.exe + 主程序.exe,為什么呢?
因?yàn)橐粋€(gè)程序不可能在自身運(yùn)行的時(shí)候把自身更新掉,所以才通過Update.exe來更新主程序.exe,像很多端游的登陸界面,其實(shí)就是個(gè)版本更新器,就是Update.exe。
但我們pyqt5經(jīng)常就是打成單個(gè)exe可執(zhí)行文件,又不想另外加個(gè)Update.exe程序,怎么辦?
問題轉(zhuǎn)化一下,就是:pyqt5的單個(gè)exe可執(zhí)行文件,如何實(shí)現(xiàn)自更新呢?
其實(shí)解決思路,稍微想想,大家都有,我采用這樣:
步驟1:使用老的 主程序.exe,下載新的 主程序.exe,放在一個(gè)自定義的更新目錄。
步驟2:關(guān)閉老的 主程序.exe
步驟3:刪除老的 主程序.exe
步驟4:復(fù)制新的 主程序.exe,到老的 主程序.exe的目錄位置
有了這樣解決思路,如何實(shí)現(xiàn)呢?如何做得漂亮呢?
這里借鑒了這個(gè)大神的文章《Winform單個(gè)exe實(shí)現(xiàn)自更新的技巧》
這里面用到了vbs腳本,通過vbs腳本做一些自動(dòng)化的處理。
然后,解決方案,具化一下,是這樣:
步驟0.預(yù)先編輯保存好vbs文件
步驟1.點(diǎn)擊更新按鈕,然后下載新的 主程序.exe和vbs文件,一起放在更新目錄下。
步驟2.下載完畢后,運(yùn)行vbs文件
步驟3.vbs文件運(yùn)行中.......關(guān)閉老的 主程序.exe
步驟4.vbs文件運(yùn)行中.......刪除老的 主程序.exe
步驟5.vbs文件運(yùn)行中.......復(fù)制新的 主程序.exe,到老的 主程序.exe的目錄位置
步驟6.vbs文件運(yùn)行中.......打開新的 主程序.exe
步驟7.vbs文件運(yùn)行中.......已經(jīng)完事了,還想干什么,自己按需加吧
核心代碼
主程序.exe和vbs文件,下載完,得運(yùn)行vbs文件吧,python是這樣運(yùn)行vbs文件的
import subprocess
CREATE_NO_WINDOW = 0x08000000 #不加這個(gè),會(huì)有cscript窗口,不好看
subprocess.call("cscript update.vbs", creationflags=CREATE_NO_WINDOW)
update.vbs 腳本代碼,如下
Dim wsh
Set wsh = WScript.CreateObject("WScript.Shell")
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
DesktopPath = wsh.SpecialFolders("Desktop")
UpdatePath = "C:\mysoft_update"
'清除老程序進(jìn)程
wsh.Run "taskkill /f /im mysoft.exe",0
WScript.Sleep(2000)
'刪除老程序
If fso.fileExists(DesktopPath & "\mysoft.exe") Then
fso.DeleteFile(DesktopPath & "\mysoft.exe")
WScript.Sleep(2000)
End If
'復(fù)制新程序到桌面
If fso.fileExists(UpdatePath & "\mysoft.exe") Then
fso.CopyFile UpdatePath & "\mysoft.exe", DesktopPath & "\mysoft.exe"
WScript.Sleep(2000)
End If
'運(yùn)行新程序
If fso.fileExists(DesktopPath & "\mysoft.exe") Then
wsh.Run DesktopPath &"\mysoft.exe",false,false
End If
'最后的處理
Set fso=NoThing
WScript.quit
Set wsh=NoThing
WScript.quit
寫在最后
好了,這事情基本就這樣了,我也花了半天,才學(xué)會(huì)了這幾句vbs,大家拿去用吧
整個(gè)事情,當(dāng)然還有其他代碼,不過太長(zhǎng),這里貼不下的,自己文章多看看,拼一拼吧
如果下載功能這塊不知道怎么寫,看我這邊文章,抄一抄,拼一拼就好
《pyqt5的下載進(jìn)度條-實(shí)現(xiàn)模板》
我寫的文章,一般都是百度搜不到的資料,我覺得大家需要,就專門寫下,希望對(duì)大家有幫助
歡迎大家,點(diǎn)贊,關(guān)注,留言,以表支持......謝謝!