移动开发 在pda程序中使用xml文件保存程序配置设置

Windows Mobile   2008-03-26 15:05   阅读0   评论0  
字号:    
我用的vs2005开发的PDA,在Windows CE 5.0 系统中对XML文件一样支持。只需条件System.xml的引用。
下面是我的xml文件的结构,是用来保存访问的Web Service的服务器路径
<?xml version="1.0" encoding="utf-8" ?>
<Setting>
  
<Item Key="PDAServer">
    
<value>http://10.116.196.224/PDAServer/Service.asmx</value>
  
</Item>
</Setting>

下面是从XML文件读取key为"PDAServer"的value的值
Public Function GetUrl() As String
    
Dim xmlNode As XmlNode

     Try
       XmlDoc
= New XmlDocument()
       XmlDoc.Load(Path)
       xmlNode
= XmlDoc.SelectSingleNode("//Item[@Key='PDAServer']")
       Return xmlNode.InnerText.ToString

     Catch ex
As Exception
      
' Throw ex
       Return String.Empty
    
End Try

  
End Function
下面是保存修改后的值
Public Function SaveUrl()Function SaveUrl(ByVal Url As String) As Boolean
    
Dim xmlNode As XmlNode

    
Try
       XmlDoc
= New XmlDocument()
       XmlDoc.Load(Path)
       xmlNode
= XmlDoc.SelectSingleNode("//Item[@Key='PDAServer']")
       xmlNode.InnerText
= Url
       XmlDoc.Save(Path)
      
Return True

    
Catch ex As Exception
      
Throw ex
    
Finally

    
End Try
  
End Function

效果如下图:
  
        最近项目中使用到了PDA设备,开发智能移动程序在vs2005中开发,非常容易。你既可以用 C#,vb.net又可以使用c++开发。在连接数据库方面,你既可以使用本地的 SQL Mobile数据库,又可以Web Service连接远程数据,同时在vs2005中还支持直接连接SQL Server数据库。
我要和大家分享的是我在智能设备打包发布上的一些经验。
方法一:直接在项目名上右击选“部署”,vs2005就能自动将需要的文件部署到PDA设备中,这种方法最简单,这样部署程序运行肯定是没有问题的。但这样一个不好就是,如果要部署的设备多了,启不是很费力,同时当PDA重启还原了或程序出错了要重新安装岂不是又要打开工程进行部署。所以这样方法还是不实际。

方法二:打包发行,最实际的方法还是制作一个安装包。这样一个做好了,就可以给所以的设备使用。这种比起上种方法可能稍为复杂点,搞不好,制作好的安装程序还不能运行。通过的实际经验,我觉得制作安装包,要注意将所需要的文件大包进去,尤其如果你的程序对数据库的引用(SQL Mobile还是SQL Server),就算你对release目录下所以的文件大包进去都是没有用的。因为这样直接打包进去的依然不会在安装时进行注册。如果你想打包进某个dll文件,一定要COM注册(注意只要添加的文件才有此选项)

像这种打包方法有时很难知道,到底要添加那些文件,开始我也对此为难,因为PDA的空间都有限怎样只把有用的文件打包进去呢。同时SmartDevices\SDK目录下针对不同设备文件版本也不一样,不可能一次把每个都打包进去。当然你还可以一个的试到底哪个有用哪个没有用。最简单的一个方法就是,你按照第一种方法进行部署,在输出窗口看到底vs2005自动部署进去了那些文件,你会看到下面的内容:

正在部署“D:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\windowsce\wce400\armv4\NETCFV2.ppc.armv4.cab”
正在部署“F:\learn code\SMC_PDA\BLL\bin\Release\SMC_PDA.DAL.dll”
正在部署“D:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v3.0\wce400\ARMV4\sqlce30.ppc.wce4.armv4.CAB”
正在部署“D:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v3.0\wce400\ARMV4\sqlce30.repl.ppc.wce4.armv4.CAB”
正在部署“D:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v3.0\wce400\ARMV4\sqlce30.dev.chs.ppc.wce4.armv4.CAB”
正在部署“D:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Client\v2.0\wce400\ARMV4\sql.ppc.wce4.armv4.CAB”
正在部署“D:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Client\v2.0\wce400\ARMV4\sql.dev.chs.ppc.wce4.armv4.CAB”
正在部署“F:\learn code\SMC_PDA\SMC_PDA\Symbol.Barcode.Design.dll”
正在部署“F:\learn code\SMC_PDA\Utility\bin\Release\SMC_PDA.Utility.dll”
正在部署“F:\learn code\SMC_PDA\BLL\bin\Release\SMC_PDA.BLL.dll”
正在部署“F:\learn code\SMC_PDA\SMC_PDA\bin\Release\SMC_PDA.exe”
正在部署“D:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\windowsce\diagnostics\System_SR_chs.cab”


这里它自动部署进去的是些安装包
SmartDevices\SDK下找到在cab安装包的同一个目录下也用对应的dll文件,如果可以直接把安装包复制到PDA上进行安装,也可以在你自己的安装包中添加对应的dll 文件但一定要选COM自注册。
如果你的PDA上要安装对个程序,你完全可以制作一个安装包将一些常用的文件打包进一个安装包中,这样在安装其他程序是就不用对需要的文件进行打包,这就叫一次打包多个利用,同时也节省空间。
在制作好安装包后,可以写一段注册表,让在PDA重启时自动安装,同时也可以自动启动。这种实现的方法大都通过注册表进行,(在一些PDA设备中重启会将系统还原到原始状态,所只的重启不是指一般的关机开机)
下面是我的一段注册表进行自动安装的:
; For SQL CE SDK
[HKEY_CURRENT_USER\Software\MyPrograms\Startup\Programs\Prog12]
"Name"="\windows\wceload.exe"
"Command"="/noaskdest \Application\MySetup.CAB"
"Continue"=dword:0
"ColdBootOnly"=dword:1
\Application\MySetup.CAB是要安装的文件路径,复制上面的代码到一个reg文件中,将这个reg文件放在Application目录下就可以了,同时记得将安装包设为只读,不然一次安装后它就会自动给删除。
自动启动指定程序:
1写一个注册表指定要自动启动run文件,所在的目录(将注册表文件依然放在Application目录下)
[HKEY_CURRENT_USER\Software\Symbol\Startup]
"Path"="\\Application\\Startup"
      "NoSetup"=dword:1
2 如上注册表设定自动启动的文件夹为\\Application\\Startup\,然后在Startup目录下建一个run文件,在文件写如一句你要自动启动的文件的路径,如:
\Program Files\Pro\MyPro.exe
PocketPC运行程序经常由于某些不确定的因素,导致程序就死在那里了.但在PocketPC上又没有象桌面Windows一样的任务管理器.所有出现了此问题要么就等个半天,要么就硬重启.下面给大家介绍一段软重启的代码.看过就可以直接拿来使用.
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace ResetPocketPC
{
  
class ResetPocketPC
  
{
    
public const uint FILE_DEVICE_HAL = 0x00000101;
    
public const uint METHOD_BUFFERED = 0;
    
public const uint FILE_ANY_ACCESS = 0;
    
public   uint CTL_CODE(uint DeviceType, uint Function, uint Method, uint Access)
    
{
      
return ((DeviceType << 16) | (Access << 14) | (Function << 2) | Method);
     }

     [DllImport(
"Coredll.dll")]
    
public extern static uint KernelIoControl
     (
        
uint dwIoControlCode,
         IntPtr lpInBuf,
        
uint nInBufSize,
         IntPtr lpOutBuf,
        
uint nOutBufSize,
        
ref uint lpBytesReturned
     );
    
//调用此方法软重启
    public  uint ResetPocketPC()
    
{
      
uint bytesReturned = 0;
      
uint IOCTL_HAL_REBOOT = CTL_CODE(FILE_DEVICE_HAL, 15,METHOD_BUFFERED, FILE_ANY_ACCESS);
      
return KernelIoControl(IOCTL_HAL_REBOOT, IntPtr.Zero, 0,IntPtr.Zero, 0, ref bytesReturned);
     }


   }

}


//调用
private void button1_Click(object sender, EventArgs e)
    
{
       DialogResult r
= MessageBox.Show(
        
"你确定要重启吗?",
        
"Test",
         MessageBoxButtons.YesNo,
         MessageBoxIcon.Question,
         MessageBoxDefaultButton.Button2
     );

      
if (r == DialogResult.Yes)
      
{
         ResetMobile RsMobile
= new ResetMobile();
         RsMobile.ResetPocketPC();

       }


     }
http://www.cnblogs.com/zhang3533/category/95505.html


评论(?)
阅读(?)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
网易公司版权所有 ©1997-2009