如何自动更新Windows Mobile应用程序

8

我有一个基于 .net cf 3.5 的 Windows Mobile 应用程序,客户希望拥有自动更新功能。

目前我的进展如下:

  1. 使用 Smart Device CAB 项目创建 CAB 文件(这样做足够好了吗?还是需要其他操作)

2.获取应用程序的版本号。

Assembly.GetExecutingAssembly().GetName().Version.ToString();
  1. 调用WCF Web服务来进行版本号查找。
  2. 下载新版本的cab文件。
  3. ???
  4. 在CAB文件上执行WCELoad.exe。
  5. 获得利润
5个回答

11

9
你的解决方案基本正确,但还有一些问题。
  1. 你不能自己更新。你必须关闭并让其他应用程序更新你,以防止文件共享问题。通常通过启动专门的“更新器”应用程序来处理此问题。它可能是应用程序图标的目标,因此每次启动时都会进行更新,或者可以通过“检查更新”类型的菜单项启动。无论如何,你必须启动它并确保实际应用程序没有运行。
  2. 通常最好在安装过程中提供某种形式的备份,以防发生损坏、中断等情况
  3. CAB 更新需要全面更新所有内容。这可能不是你最终想要的(你可能只想更新单个文件、程序集或其他内容),因此从拉取单个文件的逻辑开始将使你更具可扩展性。
一个旧但仍然非常有效的资源是 Alex Feinman 的 MSDN 文章,关于创建自更新应用程序

5
在WM 6上使用.netcf 3.5更新应用程序时,不需要创建专门的应用程序。我正在使用Web服务下载.cab文件,然后启动一个新进程并调用wceload进行静默安装。这将关闭我的运行中的应用程序,卸载它,然后执行安装,如MSDN文档中所述。
在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不是一个好的解决方案。

2

我们团队通过创建一个第二个移动应用程序(不属于正在更新的应用程序)来实现这一点,该应用程序在移动设备上负责下载和运行CAB文件。

  • 在每个停靠站点,主要应用程序通过调用Web服务确定是否需要更新。
  • 如果版本过期,它将使用新版本的URI调用更新程序,然后退出
  • 更新程序将下载新的CAB文件,并根据需要执行安装/重启和注册表修改。

这对我们很好地起作用了。


0

你说得对。在wM5、6之后,WCEload只会在应用程序已安装的情况下停止它,因此您不需要手动停止它。但是,您需要以静默模式安装更新,否则用户可能会取消它,因此您需要使用静默cab安装程序。从以下链接下载:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接