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

Chr*_*sma 8 clickonce installer compact-framework windows-mobile

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

这是我到目前为止:

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

2.获取应用程序版本号

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

Seb*_*ian 11

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


cta*_*cke 9

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

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

一个古老但仍然非常有效的资源是Alex Feinman 关于创建自我更新应用程序MSDN文章.


小智 5

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