.NET Compact Framework - Windows Mobile 6.5上的CAB自动更新

时间:2011-03-28 13:18:59

标签: c# .net windows-mobile compact-framework cab

我正在为我的Windows Mobile 6.5 .NET CF 3.5应用程序开发自动更新功能。 我最终得到了以下解决方案。

  1. 我使用SOAP WebService检查是否有新版本的应用程序。
  2. 如果有更新的版本,我会在SOAP响应中获取URL,然后下载它。新版本只是一个CAB完整安装文件。
  3. 下载版本后,我会在下载的CAB上使用/ silent和/ noui参数调用wceload。我想要无人值守的安装,因为这个应用程序的用户是汽车司机,他们在操作移动设备方面不是那么熟练。
  4. 流程顺利进行,但有一个例外 - / noui或/ silent选项强制wceload不显示任何窗口。我的应用程序只是消失了,并在后台安装了新版本。问题是驱动程序有时会尝试再次打开应用程序。另一点是我希望我的应用程序在更新过程完成后自动启动。所以我创建了一个单独的exe应用程序,它只调用wceload,如果它完成安装,它会运行更新版本。所有与onr异常一起工作 - 这个安装程序exe是我的CAB的一部分,所以它在其中,当wceload安装CAB时,它关闭安装程序(因为它是CAB安装程序的一部分)。因此,安装过程中断。 我的问题是 - 有没有办法“告诉CAB”不要终止那些属于这个CAB的特定exe?

    此致

3 个答案:

答案 0 :(得分:0)

它并没有真正回答您的问题,但您可以执行以下操作:

  • 启动另一个(小)可执行文件,显示“正在进行更新”屏幕。
  • 在幕后做你的事情

[设置结束] =>它启动您更新的应用程序 [等一下] =>它自行关闭,更新的应用程序已准备好使用

答案 1 :(得分:0)

CAB安装和WCELOAD在很多方面受到限制。您正在使用某种UI来告诉用户事情正在进行中,并且您希望有条件地安装CAB的某些部分,并且使用开箱即用的wceload就无法实现。你可能可以和a custom setup DLL一起破解其中的一些,但我认为“条件安装件”仍将是显示器。

一种替代方法是不使用wceload,而是创建自己的CAB提取工具。然后,您可以根据文件名等完成所有自己的UI和自定义逻辑。几年前我将an SDK and sample installer放在一起就可以实现这一点 - 但是它不是免费的,但最低成本选项只需要5美元它非常接近。

更新的CAB实际上contain an XML doc描述了安装操作(除了我编写的SDK解码的旧.000二进制文件描述符之外),所以你也可以使用它来完成所有提取并节省5美元。

答案 2 :(得分:0)

不要使用驾驶室。使用带有可执行文件和cab内部的tar.gz包。使用SharpZipLib进行解压缩。只需运行可执行文件即可完成工作。使用\windows\wceload工具运行cab安装。