iT邦幫忙

0

c# 覆蓋 自已的執行檔

如何寫 覆蓋 自已的執行檔 的程式

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
japhenchen
iT邦超人 1 級 ‧ 2020-11-16 14:20:53

1、下載新的程式放在patch資料夾裡
2、產生一支bat批次檔,內容如下

@echo off
ping localhost -n 10  
copy patch\my.exe my.exe
my.exe

ping 的用意就是模擬暫停10秒

3、執行剛剛那個批次檔
4、馬上結束自己的程式

你要做更新用的哦?

C#不該用這招,你該用ClickOnce製作可自動更新的安裝包

ClickOnce可以看成是一個大殼,或是遊戲的前導程式,意思跟幾位大師的講法差不多,至於批次檔是我以前用DELPHI年代在使用的方法,既不改用大殼也不是前導,只是一個變通的方法而已

0

你需要第二支程式來幫你做這個處理。
畢竟正在運行的程式,一般很難覆蓋掉。

正統的流程是做好另外一支更新用的程式。
主程式進入前先運行這支更新的程式。
確定沒有任何更新的話,再去運行主程式。

如果有更新,就先處理更新。
等更新完成後。才開始跑主程式。

還有一招就是大殼招。所有的主程式都是用一個大殼包起來。
主要運行的還是大殼。
而這個大殼平常只是負責呼叫應用程式跟更新程式。不做其它處理。
這樣就可以讓大殼很少有機會需要做更新。這樣就能統一處理。

視你的情況而定吧。有很多種做法的。

player iT邦大師 1 級 ‧ 2020-11-16 18:12:06 檢舉

執行中的程式,它自己的exe與其他使用中的dll檔
記得應該是會鎖在唯獨狀態
所以以往線上遊戲的更新通常是透過另一個exe檔去跑的

0
RoT
iT邦新手 5 級 ‧ 2020-11-16 15:53:34

kuolung1967, 你好

若程式不複雜的話, 基本上用 微軟提供的 ClickOnce 即可達到你要的效果

ClickOnce 參考(http://aminggo.idv.tw/blog/?p=841)

此篇寫的很詳細也很不錯。

普遍做法,

Update.exe (檢查更新程式) | Main.exe (主程式)

啟動程式時, 通常都會透過 Update.exe 檢查版本號

版本 / 檔案(特徵)數量不一樣, 從伺服器抓下來做更新, 再重新檢查是否更新完成

若無須更新, 或更新完成執行 Main.exe

歡迎討論

我要發表回答

立即登入回答