SYMBOL MC3000冷启动应用程序的自动安装
1. MC3000的机型应用程序的安装需要以下几个CAB文件:
a) 应用程序打包成CAB文件(也可以不做安装包,具体见后面详解);
b) NETCFv2.wce5.armv4i.cab,这是.NET Compact Framework v2.0的一个安装包;或者NETCFv35.wce.armv4.cab ,这是.NET Compact Framework v3.5 的一个安装包;
一般而言,上述安装包会存放在如下目录:C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE。
c) symbol.all.arm.cab,这是SYMBOL的一个安装包,在Symbol提供的软件开发包中;
d) sqlce30.dev.CHS.wce5.armv4i.CAB,sqlce30.repl.wce5.armv4i.CAB,sqlce30.wce5.armv4i.CAB,这三个CAB安装包是SQL CE数据库必须的。如果不是有SQL CE 数据库,则这些文件不需要安装。
System_SR_CHS.CAB,这是调试用到的一个安装包,不是必须的。
用.NET制作的应用程序部署到PDA上之前,必须安装.NET Compact Framework v2.0 或者.NET Compact Framework v3.5。由实际设备项目程序开发的版本来定,也就是上面的安装包,此外还要装SYMBOL的一个安装包(symbol.all.arm.cab),这些都是运行应用程序必须的环境。如果没有用到SQL CE,则其他几个安装包不是必须的。
2. 防止CAB文件自动重置的设置
(1)首先编写CPY文件。新建一个记事本,然后在上面写下遵循以下格式的语句。
这里以.Net Compact Framework v3.5 为例:
\application\NETCFv35.wce.armv4.cab > \windows\ NETCFv35.wce.armv4.cab
\application\symbol.all.arm.cab > \windows\symbol.all.arm.cab
保存为.cpy文件的格式。
(2)然后编写REG文件。
[HKEY_CURRENT_USER\Software\Symbol\Startup\Programs\Prog10]
"Name"="\windows\wceload.exe"
"Command"="\Windows\NETCFv35.wce.armv4.cab "
"Continue"=dword:0
"ColdBootOnly"=dword:1
[HKEY_CURRENT_USER\Software\Symbol\Startup\Programs\Prog11]
"Name"="\windows\wceload.exe"
"Command"="\Windows\symbol.all.arm.cab"
"Continue"=dword:0
"ColdBootOnly"=dword:1
将前面准备好的CAB文件同编写好的CPY / REG文件放到PDA的Application目录下,就实现了在手持终端系统冷启动后将Application路径下的CAB文件自动复制到\windows路径下,并且自动安装。
应用程序可以不制作安装包,直接把运行程序及快捷方式放在Application目录下,并在CPY文件中建立快捷方式的自动复制语句将快捷方式复制到桌面上,这样PDA冷起后,直接点击桌面的快捷方式就可以运行应用程序了。
可以同时参考如下文章:
1. Windows CE编程初体验之自动安装制作
WCF for .Net Compact Framework 3.5 应用程序开发示例
Visual Studio 2008 为 Windows Mobile 应用程序的开发人员提供了通过 Microsoft .NET Compact Framework 3.5 访问 Windows Communication Foundation (WCF) 功能子集的能力。
.NET Compact Framework 3.5 PowerToys 附带了一个名为 NetCFSvcUtil.exe 的工具,可以为您生成这些服务代理类。由于 NetCFSvcUtil.exe 没有包括在 Visual Studio 2008 中,因此您需要自行下载 Power Toys for .NET Compact Framework 3.5,下载地址请参考文章最后提供的链接。
由于 .NET Compact Framework 3.5 不支持 wsHttpBinding,因此需要将 Visual Studio 创建的默认端点改为 basicHttpBinding 或为该类型添加一个新端点。由于利用 WCF 可以很方便地提供多个端点,而且 wsHttpBinding 为那些支持它的应用程序提高了安全性,因此我们将保留它不动并添加一个使用 basicHttpBinding 的新端点。
关于WCF Service 应用程序的开发,这里不进行具体描述。不过,推荐一篇WCF经典文章:
关于移动设备应用程序,通过Visual Studio 2008,使用“智能设备项目”模板创建一个新项目。将下列 Compact WCF 程序集添加到您的项目引用中:System.ServiceModel.dll 和 System.Runtime.Serialization.dll。这些程序集是开发WCF Client 端程序所必须的。
下面介绍创建WCF for .Net Compact Framework 3.5 应用程序的一些基本步骤。
1. 在创建好智能设备项目程序后,接下来通过Power Toys for .NET Compact Framework 3.5 提供的 netcfsvcuti.exe 工具,创建WCF Service 的代理类和元数据,如Contract等等。
本示例程序调用的WCF Service 是EntLib.com 提供的一个Article Service,用来返回最新的博客技术文章。
上述脚本,产生如下2个文件:
Generating files...
ArticleManager.cs
CFClientBase.cs
此工具不会像桌面 svcutil.exe 工具那样生成 output.config 文件。.NET Compact Framework 3.5 不支持通过配置文件对 WCF 进行配置,因此服务的所有端点信息都需要在代码中。
将上述文件,添加到智能设备项目程序中,后面会调用ArticleManager.cs 文件。
此工具生成的代理类ActicleManager.cs将方法调用转换到 WCF 消息中,然后使用 .NET Compact Framework 消息传送层进行发送。响应消息随后被反序列化并通过该方法的返回值传回应用程序。
2. 编写代码调用WCF Service。
下面的范例代码,调用WCF Service 的ArticleManager.GetRecentArticle() 方法,返回最新的10篇博客文章。
private ArticleEntity[] articleList = new ArticleEntity[]{};
private void btnRetrieve_Click(object sender, EventArgs e)
{
IArticleService articleManager = new ArticleServiceClient();
articleList = articleManager.GetRecentArticle();
lstNewArticle.DataSource = articleList;
lstNewArticle.DisplayMember = "Title";
lstNewArticle.ValueMember = "ID";
}
WCF服务器不会响应任何设备请求,除非设备或仿真器已插入。
下面是示例程序的运行界面:
示例程序代码:
参考文章:
1. 使用 .NET Compact Framework 编写 IM 应用程序, MSDN
2. Power Toys for .NET Compact Framework 3.5 开发WCF for CF 3.5 的工具包