2009-04-15 34 views
8

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

这是我到目前为止有:

  1. 创建使用智能设备CAB项目一个CAB(难道这还不够好,还是应该我人在这里做的东西)

2。获取应用程序版本号

Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
  • 征集做了版本号查找一个WCF Web服务。
  • 下载cab文件的新版本。
  • ???
  • 上CAB文件执行WCELoad.exe
  • 利润
  • 回答

    9

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

    1. 您无法更新自己。您必须关闭并且有一些应用程序更新您以防止文件共享问题。这通常是通过启动专用的“更新程序”应用程序来处理的。它可能是应用程序图标的目标,因此会在每次启动时进行更新,或者可能会通过“检查更新”类型的菜单项启动。无论如何,你必须启动它,并确保实际的应用程序没有运行。
    2. 通常是一个好主意,提供某种形式的备份,在发生损坏,中断安装的情况下
    3. CAB更新将要求批量更新所有内容。这可能不是你想要的最终结果(你可能只想更新一个文件,程序集或其他),所以从下拉单个文件的逻辑开始,这会让你的方式更具可扩展性。

    一个古老但仍非常有效的资源是Alex Feinman的MSDN article on creating self-updating applications

    2

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

    • 在每个码头上,主应用程序确定它是否需要通过Web服务调用进行更新。
    • 如果它的版本已经过时,它会调用与新版本的URI更新程序安装应用程式,然后退出
    • 的更新应用程序会下载新的CAB并执行安装/重新启动,注册表修改适当。

    这对我们很有效。

    4

    这是没有必要创建一个专用的应用程序来更新,至少不在WM 6与.netcf 3.5。我正在使用web服务下载.cab文件,然后启动一个新进程并调用wceload来进行无声的出租车安装。这需要照顾关闭我的运行应用程序,卸载它,然后执行安装像 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文件并不是一个很好的解决方案。

    0

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

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