2009-04-15 55 views
8

我有一個.net cf 3.5 Windows Mobile應用程序,我的客戶想擁有自動更新功能。如何自動更新Windows Mobile應用程序

這是我到目前爲止有:

  1. 創建使用智能設備CAB項目一個CAB(難道這還不夠好,還是應該我人在這裏做的東西)

2。獲取應用程序版本號

Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
  • 徵集做了版本號查找一個WCF Web服務。
  • 下載cab文件的新版本。
  • ???
  • 上CAB文件執行WCELoad.exe
  • 利潤
  • 回答

    9

    您的解決方案通常是正確的,但有一些問題。

    1. 您無法更新自己。您必須關閉並且有一些應用程序更新您以防止文件共享問題。這通常是通過啓動專用的「更新程序」應用程序來處理的。它可能是應用程序圖標的目標,因此會在每次啓動時進行更新,或者可能會通過「檢查更新」類型的菜單項啓動。無論如何,你必須啓動它,並確保實際的應用程序沒有運行。
    2. 通常是一個好主意,提供某種形式的備份,在發生損壞,中斷安裝的情況下
    3. CAB更新將要求批量更新所有內容。這可能不是你想要的最終結果(你可能只想更新一個文件,程序集或其他),所以從下拉單個文件的邏輯開始,這會讓你的方式更具可擴展性。

    一個古老但仍非常有效的資源是Alex Feinman的MSDN article on creating self-updating applications

    2

    隊我在此實現爲通過對爲所述移動設備創建第二移動應用(即正在更新的應用程序之外)負責下載和運行CAB。

    • 在每個碼頭上,主應用程序確定它是否需要通過Web服務調用進行更新。
    • 如果它的版本已經過時,它會調用與新版本的URI更新程序安裝應用程式,然後退出
    • 的更新應用程序會下載新的CAB並執行安裝/重新啓動,註冊表修改適當。

    這對我們很有效。

    4

    這是沒有必要創建一個專用的應用程序來更新,至少不在WM 6與.netcf 3.5。我正在使用web服務下載.cab文件,然後啓動一個新進程並調用wceload來進行無聲的出租車安裝。這需要照顧關閉我的運行應用程序,卸載它,然後執行安裝像 MSDN docs here

    指出,在Windows Mobile 5.0及更高版本,使用Wceload.exe重新安裝一個.cab文件,WCELOAD時。在安裝新版本之前,exe會卸載以前安裝的.cab文件的版本。在此過程的卸載過程中,Wceload.exe根據文件名稱使用.cab文件關閉目標設備上安裝的所有當前正在運行的可執行文件。 Wceload.exe還會關閉任何作爲文件操作目標的可執行文件,例如移動或複製。要關閉可執行文件,Wceload.exe會將WM_CLOSE發送到進程擁有的所有頂級窗口。如果該進程在收到WM_CLOSE消息後沒有及時退出,則Wceload.exe通過調用TerminateProcess強制關閉它。 Wceload.exe不會嘗試關閉目標設備上運行時映像附帶的可執行文件。

    我還有一個cesetup.dll用於在卸載過程中額外清除文件。

    我遇到的最大問題是,無法在執行靜默安裝時更改我的應用程序的安裝文件夾,並且它默認使用我的.inf文件中的%installDir%屬性。爲每個想要更新的設備構建一個單獨的.cab文件並不是一個很好的解決方案。

    0

    你說得對。在wM5之後,6 ... WCEload僅在安裝時停止應用程序,因此您不需要手動停止它。但是您需要以靜默方式安裝更新,因爲如果用戶不能取消該更新,則需要使用silen cab安裝程序。從

    http://cssoft.freehosting.net/website2/default.html