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

时间:2009-04-15 21:41:47

标签: windows-mobile compact-framework installer clickonce

我有一个.net cf 3.5 Windows Mobile应用程序,我的客户想要自动更新功能。

这是我到目前为止所做的:

  1. 使用智能设备CAB项目创建一个CAB(这个还不错,或者我应该在这里做些什么)
  2. 2.获取应用程序版本号

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

5 个答案:

答案 0 :(得分:11)

我刚刚发布了WmAutoUpdate,一个.NET c#框架,它将在Compact Framework上进行自动更新。它可以在Github上免费获得:http://github.com/seboslaw/wmautoupdate

答案 1 :(得分:9)

您的解决方案通常是正确的,但有一些问题。

  1. 您无法自行更新。您必须关闭并让一些更新的应用程序更新您以防止文件共享问题。这通常通过您启动的专用“更新程序”应用程序来处理。它可能是应用程序图标的目标,因此可以在每次启动时进行更新,也可以通过“检查更新”类型的菜单项启动。无论如何,你必须启动它并确保实际的应用程序没有运行。
  2. 在发生腐败,中断安装的情况下提供某种形式的备份通常是个好主意
  3. CAB更新需要批量更新所有内容。这可能不是你想要的最终(你可能只想更新一个文件,程序集或其他),所以从下拉单个文件的逻辑开始将使你更具可扩展性。
  4. 一个旧的,但仍然非常有效的资源是Alex Feinman的MSDN article on creating self-updating applications

答案 2 :(得分:5)

没有必要创建一个专用的应用程序来更新,至少不是在带有.netcf 3.5的WM 6上。我正在使用webservice下载.cab文件,然后启动一个新进程并调用wceload来进行静默的cab安装。这需要关闭我正在运行的应用程序,卸载它然后按照中所述执行安装 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并不是一个很好的解决方案。

答案 3 :(得分:2)

我所在的团队通过在负责下载和运行CAB的移动设备上创建第二个移动应用程序(正在更新的应用程序之外)来实现此目的。

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

这对我们很有用。

答案 4 :(得分:0)

你是对的。在wM5之后,6 ... WCEload只是在安装时停止应用程序,因此您不需要手动停止它。但是您需要以静默方式安装更新,因为如果不是用户可以取消它,那么您需要使用silen cab安装程序。从

下载

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