Dot-Net
實施自我更新軟體的最佳方法
我們有一個最小的“更新程序”exe,它檢查遠端 URL 的更新、下載它們並在啟動真正的應用程序之前替換磁碟上的文件。但是,如果我們想替換更新程序 EXE,那麼 AFAIK 我們有兩個選擇:
- 影子復製程序集,.Net 將創建 EXE(和任何引用的程序集)的影子副本並載入這些程序集,以便可以替換非影子程序集並將在下次啟動應用程序時使用。
- 確定哪些文件被替換並在磁碟上重命名/移動它們。Windows 似乎允許重命名/移動鎖定的文件,因此我們可以移動文件並複製到新的程序集中。同樣,在下次啟動應用程序時,我們將啟動新程序集。這裡提到了這種方法
這第二種方法是推薦的方法嗎?這種方法有什麼陷阱嗎?
另一種選擇:當主應用程序想要更新自己時,它會產生一個新的更新程序程序,然後關閉自己。與此同時,生成的程序等待主應用程序關閉(程序消失),然後更新所有必要的文件(包括 .exe)。之後,它只是重新啟動主應用程序並退出更新程序程序。
我使用第二種方法沒有任何問題。只需確保正確下載了下載的程序集。;)
執行 Update.exe 並讓它這樣做:
- 下載新的 update.exe 作為 update.ex_
- 將 update.exe 重命名為 update.bak(可以重命名,但不能覆蓋)
- 將 update.ex_ 重命名為 update.exe
- 重啟更新.exe
我這樣做完全沒有問題,因此在我們說話時,它已在大約 400 名客戶的實時環境中進行了測試和執行。