pyqt5單個(gè)exe實(shí)現(xiàn)自更新的技巧

關(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)注,留言,以表支持......謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容