簡體   English   中英

從C#代碼安裝/執行CAb文件[Windows Mobile應用程序文件]?

[英]Install/Execute a CAb file[Windows Mobile application file] from C# Code?

我正在為Framework 6開發Windows Mobile應用程序。我想添加功能以使用設備上當前正在運行的應用程序升級補丁。

Windows Mobile應用程序運行時,應異步檢查服務器數據庫中可用的任何新版本。 如果存在修補程序,則程序應下載.cab(Windows Mobile安裝程序)文件並自動安裝/運行它。

我主要對這些有疑問:

  1. 如何將cab文件下載到設備的特定文件夾。
  2. 如何以編程方式安裝cab文件。 (以編程方式觸發cab文件安裝,而無需用戶干預)

怎么做?

請幫我這個.....

將文件下載到本地文件夾通常取決於您的存儲庫。 如果將其存儲在文件共享或基於網絡的共享文件中,則需要稍有不同的代碼。 您必須考慮通過某種清單文件或數據庫記錄來提供預下載版本檢查的選項,以避免僅下載整個補丁來檢查其版本。

一旦下載了已排序的部分(再次取決於存儲),就可以通過調用wceload.exe從應用程序中調用CAB安裝:

            Process proc = Process.Start("wceload.exe", "\"" + Path.Combine(applicationPath, updateFileName) + "\"");
            proc.WaitForExit();

但是,這將要求用戶進行交互,然后按“確定”以在舊版本之上安裝新版本。

[編輯]一些設備制造商(例如Intermec)提供了在重新啟動時自動安裝CAB的方法,但這是特定於設備的,因此您必須閱讀相關內容。

我只需要這樣做,就好像安裝了一部分。 如果有人需要下載部分,這對我有用。

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Timeout = 10000;
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream receiveStream = response.GetResponseStream();

        using (Stream file = File.OpenWrite("\\Windows\\Desktop\\file.cab"))
        {
            byte[] buffer = new byte[8 * 1024];
            int len;
            while ((len = receiveStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                file.Write(buffer, 0, len);
            }    
        }

我通過以下方式解決了這個問題:

  1. 打開與桌面應用程序的tcp / ip連接。
  2. 從PDA應用程序發送當前版本號。
  3. 在編譯過程中,手動將值添加到#.inf文件版本字段中(此處找不到在編譯過程中自動執行此操作的解決方案)。
  4. 桌面應用程序在* .inf文件中查找可用版本,並將其發送回PDA應用程序。
  5. PDA應用程序接收它並與運行版本進行比較。
  6. 如果dektop計算機上的版本高於運行版本,則PDA應用程序發送請求以在台式計算機上傳送CAB文件(此處可以引入對話框以請求cab文件)。
  7. 台式計算機將CAB文件發送到PDA應用程序。
  8. PDA應用程序接收CAB文件並將其存儲在本地。
  9. 然后通過wceload.exe使用參數/ delete 1 / silent“ cab文件的完整路徑”運行安裝
  10. 如果安裝成功,請退出應用程序或重新啟動PDA。
  11. 如果PDA應用程序具有

它不是幾串代碼,但是效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM