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

Windows mobile 如何自动更新Windows Mobile应用程序,windows-mobile,compact-framework,installation,clickonce,Windows Mobile,Compact Framework,Installation,Clickonce,我有一个.net cf 3.5 Windows Mobile应用程序,我的客户希望它具有自动更新功能 以下是我到目前为止的情况: 使用智能设备CAB项目创建CAB(这足够好吗,或者我应该在这里做其他事情) 2.获取应用程序版本号 Assembly.GetExecutingAssembly().GetName().Version.ToString(); 调用的WCF web服务进行版本号查找 下载cab文件的新版本 在CAB文件上执行WCELoad.exe 利润 我所在的一个团队通过在负责下载

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

以下是我到目前为止的情况:

  • 使用智能设备CAB项目创建CAB(这足够好吗,或者我应该在这里做其他事情)
  • 2.获取应用程序版本号

    Assembly.GetExecutingAssembly().GetName().Version.ToString();
    
  • 调用的WCF web服务进行版本号查找
  • 下载cab文件的新版本
  • 在CAB文件上执行WCELoad.exe
  • 利润

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

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

    这对我们来说非常有效。

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

  • 你不能更新你自己。您必须关闭并让一些Other应用程序更新您,以防止文件共享问题。这通常是由一个专用的“更新程序”应用程序来处理的。它可能是应用程序图标的目标,因此每次启动时都会进行更新,也可能通过“检查更新”类型的菜单项启动。无论如何,你必须启动它并确保实际应用程序没有运行
  • 一般来说,在发生损坏、中断的安装时,最好提供某种形式的备份
  • CAB更新需要对所有内容进行全面更新。这可能不是您最终想要的(您可能只想更新单个文件、程序集或任何东西),因此从下拉单个文件的逻辑开始将使您的方式更具可扩展性

  • Alex Feinman是一个古老但仍然非常有效的资源。

    没有必要创建一个专用的应用程序进行更新,至少在WM 6和.netcf 3.5上不需要。我正在使用Web服务下载.cab文件,然后启动一个新进程并调用wceload来执行静默式cab安装。这将负责关闭我正在运行的应用程序,卸载它,然后执行中所述的安装

    在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并不是一个很好的解决方案。

    我刚刚发布了WmAutoUpdate,一个.NET c#框架,它将在Compact框架上进行自动更新。它在Github上免费提供:

    你说得对。在wM5、6之后。。。如果安装了应用程序,WCEload只会停止应用程序,因此不需要手动停止。但是您需要在静默模式下安装更新,因为如果没有,用户可以取消它,因此您需要silen cab安装程序。从下载