• Windows Mobile模拟器环境设置与开发问题小结


    由于真实的设备数量有限,使用模拟器来开发是个不错的选择。但在实际的开发过程中,会遇到很多意想不到的问题。下面我就针对我近一段时间到的问题,做一个简要的小结,留待以后需要时回顾,也供需要的朋友参考。

    我的开发环境是:Windows 7旗舰版(简体中文)、Visual Studio 2008专业版(简体中文)SP1

    我先后安装了以下三个东西:

    1、              Windows Mobile设备中心(http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyId=46F72DF1-E46A-4A5F-A791-09F07AAA1914&displaylang=zh-cn)。

    2、              Windows Mobile 6 Professional SDK.msi

    3、              Windows Mobile 6 Professional Images (CHS).msi

    备注:对于Windows Mobile设备中心,就是以前的ActiveSync,是针对VistaWin7操作系统的。

     

    我在开发过程中主要遇到以下三大问题:

    1)  模拟器与PC连接问题(利用Windows Mobile设备中心)。

    2)  模拟器内存空间太小。

    3)  模拟器上的客户端程序通过Socket PC上的服务器端的连接遭遇强进关闭。

     

    下面来我一一回顾一下我的解决方法:

    1) 模拟器与PC连接问题(利用Windows Mobile设备中心)。

    这个连接问题,08年的时候,就记我抓狂过。那段时间曾经历过短暂的SmartPhone的开发。那时是的环境主要是Windows Server 2003 + ActiveSync + VS2005 + Windows Mobile 5.0 SDK等。模拟器与PC的连接,十次有八次失败,真实的设备连接PC倒算正常。由于当时主要工作是负责服务器端的开发,客户端的问题也就没有深入研究下去。

    今年,又开始接触到Windows Mobile的开发了,开发环境与设备的平台稍有变化,Win7 + VS2008 + Windows Mobile 6, 真实的机器叫做“啥物理网移动计算机”,好像就是一个PDA+Phone的设备,网上有提到过掌上电脑型手机,不知道是不是这个东西。WinCE, Smart Phone, Pocket PCWindows Mobile,这些概念挺复杂的,建议去网上搜索一下文章。

    言归正转,曾经遇到的连接不稳定的问题,这一次依然出现了。疯狂的在互联网搜索,发现有不少人也遇到了,试了许多方法,都不成功。

    正常的连接步骤,其它挺简单的:打开Windows Mobile设备中心,选择连接设备的端口为DMA -> 打开设备仿真器管理器 ->右键所需的模拟器,选择连接(这时会弹出一个模拟器画面) -> (等模拟器中的系统启动完毕后)再在设备仿真器管理器中右击刚才选择的模拟器,选择插入底座(模拟真实设备通过USB连接PC的行为)。——经过这几个步骤,正常情况下,模拟器就会与PC成功连接,进行进行数据同步等。

    但是,上面的正常的情况,我十次尝试,估计只会有两次是成功连接的。

    死活连接不上的过程,暂且略过。

             我的解决办法:

              上面步骤,只需要调整其中的一个就行,那就是——打开设备仿真器管理器。我之前总是先打开Visual Studio 2005/2008,然后再通过菜单“工具->设备仿真器管理器”打开的。后来,我找到了这个设备仿真器管理器的可执行文件,它位置就在“C:\Program Files\Microsoft Device Emulator\1.0\ dvcemumanager.exe”,通过这个位置打开“设备仿真器管理器”,其它的步骤不变,就可以提供正常连接PC的机率(反正我现在是100%连接成功)。不知道以后会不会再遇到不能连接的问题。暂且就先这样了,再遇到问题再说吧。

     

    2) 模拟器内存空间太小。

    由模拟器默认的存储空间有限(30MB左右),而我的程序(客户端主程序文件+.Net Compact Framework3.5)正好超过了这个限制。

    令人抓狂的是,如果我手动在模拟器上分别安装.Net Compact Framework3.5 和我的程序的安装文件cab时,安装失败,也不提示一下失败的原因。

    利用Visual Studio 调试或部署的时候,才从输出窗口中得到提示:模拟器的空间不足。

    从这位朋友的博客上得到的扩展模拟器存储空间的办法:http://www.cnblogs.com/dearsj001/archive/2009/08/15/ExtandWMMemory.html

    我使用的是其中的方法:2.2 利用Storage Card进行扩展的方法

    具体方法如下,选择模拟器的File->Configure->General->Shared folder,并选择本地PC的一个文件夹,映射为模拟器的Storage Card

    在使用VS进行部署和调试的时候,需要使用到方法:2.3 改变程序调试目录进行扩展

    我们建立的Windows Mobile项目,默认的程序调试路径为My Device->Program Files,但是有的时候,我们调试的应用程序可能会占用很大的空间,如果超过了Storage的限制(32M),那么肯定就无法进行调试。既然Storage的大小为32M,已经hard code了,那么我们有没有办法来改变程序调试的路径,使其也映射到本地PC文件夹呢?答案是肯定的。具体方法如下:点击”Project Properties”,(注意不是Solution Properties),改变Device中的Output File Folder,例如改为“\storage card\***”,这样,当你Debug程序的时候,就会下载到Storage Card当中去了,而Storage Card又已经通过方法2.2映射到本地PC的文件中去了。因此,我们就不用受32M Storage空间的限制了。

    以上两段内容,摘自施炯的文章,非常感谢他的无私分享。

     

    3) 模拟器上的客户端程序通过Socket PC上的服务器端的连接遭遇强进关闭。

    当模拟器可以与PC连接了,模拟器上网也是很顺理成章的事了,我还在PC上建了一个Web站点测试了一下,模拟器上的IE是可以正常访问PC上的Web站点的。

    模拟器上的存储空间也扩展了,很大,几个G呢!

    我的客户端程序也在模拟器上成功部署和安装了,运行起来,都挺正常的。

    但又出现了另一个问题。我的客户端需要通过Socket连接PC端上的一个服务,IP192.168.0.138,端口是8080。客户端和服务端两个程序首先是没有问题的,因为使用真实的设备跑过,一切正常。但使用模拟器时,却不成功,经调试,发生是Socket连接时,发生异常:现有连接被远程主机强行关闭。

    这个异常信息,似乎以前遇到过。但一时想不起来,后来才想起来,我曾经在调用Web Service时,遇到过,好像是Web Service的地址写错了。我在想是不是因为我的客户端向一个未提供服务的端口发出请求,被拒绝了。应该是这样,专业的描述,我不会描述。这时我想起了,我曾在yalin_M BLOG:(技术QA:如何设置 Windows Mobile 6.0 模拟器上网?http://yalin.blog.51cto.com/262153/59962/)上了解到有两种方法可以实现Windows Mobile模拟器上网。第一种是通过 Windows Mobile 设备中心,也就是先前的 ActiveSync,连接到 Internet 上;第二种是通过配置 IP 地址,直接通过公司的网络连接到 Internet 上。

    而我一般都是使用Windows Mobile设备中心实现上网,我在想是不是因为这个模拟器没有独立的IP,是不是,这个模拟器此是的IPPC上的IP是同一个,然后模拟器连接不到真实位置的服务端。——这仅是我的猜想,不过感觉有类似的原因在里面。

    我取消了模拟器的连接,即在设备仿真器管理器中,右击已插入底座的模拟器选择移除底座。

    具体步骤:在模拟器窗口,选择文件->配置->网络->选择“启用NE2000 PCMCIA 网络适配器并绑定到”,在下拉框中选择你的PC的物理网卡。点击“确定”退出。在模拟器内部的Windows Mobile界面中,点击开始->设置->连接->网卡->选择“NE2000 兼容 Ethernet驱动程序”-> 选择“使用服务器分配的IP地址”。-> 点击右上角OK保存退出。此时你的模拟器已经了连接。再设置一下,就可以上网了。开始->设置->连接->连接->高级->选择网络->在程序自动连接到Internet时,使用的选项由默认的“Internet设置”改为“单位设置”(因为我们在上一个步骤中网卡设置的就是单位设置)。->OK退出。现在可以使用模拟器上的IE访问互联网了。

    在上面步骤中,注意观察的话,可以发现模拟器已经有了独立的IP,一个与PC不同,但属于同一个网段的IP

    此时再跑一下我的程序,我的客户端程序可以与PC上的服务端程序,通过Socket正常通信了。

     

    以上是这一段时间,使用Windows Mobile模拟器开发过程中遇到的问题,比较啰嗦,写的不好,希望能给需要的朋友提供参考。可能后续还会有问题出现。再说吧。

     

  • 相关阅读:
    学习 | mockjs入门
    学习 | 基于require.js的三级联动菜单【入门】
    Android_百度地图基本用法5
    Android_百度地图基本用法4
    Android_百度地图基本用法3
    Android_百度地图基本用法2
    Android_百度地图基本用法1
    Android_Event Bus 的基本用法
    Kotlin基础-扩展
    Kotlin基础-泛型
  • 原文地址:https://www.cnblogs.com/luqingfei/p/2350904.html
Copyright © 2020-2023  润新知