从C#代码安装/执行CAb文件[Windows Mobile应用程序文件]?

时间:2011-12-22 11:59:02

标签: c# winapi windows-mobile

我正在为Framework 6开发Windows Mobile应用程序。我想添加一些功能来升级当前在设备上运行的应用程序的补丁。

当Windows Mobile应用程序正常工作时,它应该异步检查服务器数据库中可用的任何新版本。如果补丁存在,程序应下载.cab(Windows Mobile安装程序)文件并自动安装/运行。

主要是,我怀疑这些:

  1. 如何将cab文件下载到设备的特定文件夹。
  2. 如何以编程方式安装cab文件。 (以编程方式触发cab文件安装,无需用户干预)
  3. 怎么可能呢?

    请帮帮我......

3 个答案:

答案 0 :(得分:3)

将文件下载到本地文件夹通常取决于您的存储库,即。如果您将代码存储在文件共享上或者说基于Web的代码,则需要稍微不同的代码。 您必须考虑通过某种清单文件或数据库记录提供预下载版本检查的选项,以避免下载整个补丁只是为了检查其版本。

下载部件后(再次,取决于存储),您可以通过调用wceload.exe从您的应用调用CAB安装:

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

然而,这将要求用户进行互动并按“确定”。在旧版本之上安装新版本。

[编辑] 一些设备制造商(如Intermec)提供了在重新启动时自动安装CAB的方法,但这是特定于设备的,因此您必须阅读此内容。

答案 1 :(得分:1)

我通过以下方式解决了这个问题:

  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应用程序
  12. 这不是一些代码串,但它完美无缺。

答案 2 :(得分:1)

我必须这样做,好像安装部分已经回答了。如果有人需要下载部分,这对我有用。

 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);
            }    
        }