系统全面的教你做Windows Mobile程序的安装程序

今天第一次自文章,如果有写的不好地方,还请各位高手多多指点。该文章绝对原创,欢迎各位朋友转载(但是必须注明出处,尊重一下别人的劳动成果,这样我才会有激情与动力为大家奉献出更多更精彩的文章。另外如果你觉得我这篇文章写的好,请您支持我,并能把它转给你身边同样做技术而且可能需要的人的。如果你认为我的文章写的不好,麻烦你告诉我,我会改进的。如果你对移动开发那方面感兴趣的话或有问题的话,也可以告诉我。虽然我不敢保证百分百的解决你的问题。不过也许你告诉我,说不定我能帮你解决。

       今天我想和大家讲解一下如何制作一WM项目的安装程序。主要包括制作可以在智能设备上运行的.cab文件、在桌面上运行的.exe文件、包括对项目的加密处理、生成中文的安装程序包。如果大家对这篇文章反应比较好的话。我后面还会写一篇文章如果制作一个在桌面的电脑运行的程序,把移动项目和所有其他组件(比如:NETCFv2.wce5.armv4i.cabsql.ppc.wce5.armv4i.CABsqlce.ppc.wce5.armv4i.CAB)一次性的安装到智能设备上。

       话不多说,回到正题,简单介绍一下整体思路:

1、  创建智能项目HelloWord

2、  使用Dotfuscator Community EditionHelle Word程序生成的可执行文件进行加密处理。(对可执行文件进行混淆处理,否则源代码能很容易的被反编译出来)

3、  创建智能项目安装程序HelloWordCAB。使用加密过的HelloWordexedll生成智能设备安装程序HelloWordCAB.CAB

4、  使用使用软件WinCE CAB ManagerHelloWordCAB.CAB中的对应文件与文件夹修改为中文名称,修改注册表相关信息。然后生成新的HelloWordCAB_CN.CAB、新的HelloWordCAB_CN.inf文件。

5、  创建桌面安装程序项目WindowsSetup

6、  HelloWordCAB_CN.CAB书写安装配置文件HelloWordCAB_CN.ini。使用WindowsSetup来把程序部署到移动设备上。

 

下面来具体介绍各个流程。

1、  创建智能项目HelloWord

创建一个最简单的移动项目,窗体上有一个按钮。点击按钮显示"Hello Word!" 编译并生成该项目。
 

using
System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace HelloWord

{

    public partial class MainFrm : Form

    {

        public MainFrm()

        {

            InitializeComponent();

        }

 

        private void btnHello_Click(object sender, EventArgs e)

        {

            MessageBox.Show("Hello Word!");

        }

    }

}

 

2、  使用Dotfuscator Community EditionHelle Word程序生成的可执行文件进行加密处理。(对可执行文件进行混淆处理,否则源代码能很容易的被反编译出来)

a)         VS2008->工具->Dotfuscator Community Edition->创建新项目

b)        Dotfuscator->输入        将刚刚生成的HelloWord.exe添加进来


c)       
Dotfuscator->
重命名           中选择需要混淆的内容

 


d)       
Dotfuscator->
生成        中选择目标目录后点击“生成”生成记过加密的HelloWord.exe

 


3、 
创建智能项目安装程序HelloWordCAB。使用加密过的HelloWordexedll生成智能设备安装程序HelloWordCAB.CAB

a)         创建一个新“智能设备CAB项目” HelloWordCAB

 


b)       
把刚刚加密过的HelloWord.exe文件添加到需要部署的目录中。

 


c)       
编译项目HelloWordCAB 并生成英文的移动设备CAB安装包HelloWordCAB.CAB

4、  使用使用软件WinCE CAB ManagerHelloWordCAB.CAB中的对应文件与文件夹修改为中文名称,修改注册表相关信息。然后生成新的HelloWordCAB_CN.CAB、新的HelloWordCAB_CN.inf文件。

a)         WinCE CAB Manager打开生成的CAB安装包HelloWordCAB.CAB

b)       
把文件夹名称、文件名称、快捷方式修改为对应的中文名称。

c)       
生成中文版本的CAB安装包HelloWordCAB_CN.CAB

d)        这时候的中文CAB安装包可以发布给客户拷贝到设备上部署了。当然你也可以继续下去做一个桌面的安装程序。

5、  创建桌面安装程序项目WindowsSetup

创建桌面安装程序项目WindowsSetup

 


6、 
HelloWordCAB_CN.CAB书写安装配置文件HelloWordCAB_CN.ini。使用WindowsSetup来把程序部署到移动设备上。

a)         HelloWordCAB_CN.CAB编写安装配置文件HelloWordCAB_CN.ini。具体内容如下

[CEAppManager]

Version = 1.0

Component = OpenNETCF WiFiDiscovery

 

[OpenNETCF WiFiDiscovery]

Description = Sample WiFi Network Discovery Application using the SDF

CabFiles = HelloWordCAB_CN.CAB

b)        WindowsSetupHelloWordCAB_CN.CAB安装到移动设备上。主要运用了ActiveSync中的CeAppMgr

/// <summary>

            /// 部署与删除移动设备上的程序,检测或安装PC机上是否安装软件ActiveSync

            /// 部署程序到移动设备上时候,需要在同一目录下提供.cab.inf.ini文件

            /// </summary>

            public class ActiveSync

            {

                #region private

                /// <summary>

                /// HKEY_LOACL_MACHINE中存放CEAPPMGR.EXE所在目录的键

                /// </summary>

                private const string CEAPPMGR_PATH = @"Software/Microsoft/Windows/CurrentVersion/App Paths/CEAPPMGR.EXE";

                /// <summary>

                /// HKEY_LOACL_MACHINEActiveSync程序在注册表中的位置

                /// </summary>

                private const string ACTIVESYNC_INSTALL_PATH = @"SOFTWARE/Microsoft/Windows CE Services";

                /// <summary>

                /// HKEY_LOACL_MACHINE中存放WCESCOM.EXE目录的键

                /// </summary>

                private const string WCESCOMM_PATH = @"SOFTWARE/Microsoft/Windows/CurrentVersion/App Paths/wcescomm.exe";

                /// <summary>

                /// HKEY_LOACL_MACHINEActiveSync程序的安装路径

                /// </summary>

                private const string INSTALLED_DIR = "InstalledDir";

                #endregion

                #region  property

                /// <summary>

                /// 判断电脑上是否安装了ActiveSync软件

                /// </summary>

                public static Boolean IsHaveActiveSync

                {

                    get

                    {

                        //获取ActiveSync的注册表键 

                        //如果ACTIVESYNC_INSTALL_PATH不存在,说明该电脑从未安装过ActiveSync

                        RegistryKey keyActiveSync = Registry.LocalMachine.OpenSubKey(ACTIVESYNC_INSTALL_PATH);

                        if (keyActiveSync == null)

                            return false;

 

                        //获取程序 CEAPPMGR.EXE 的文件目录 

                        //如果ACTIVESYNC_INSTALL_PATH存在而WCESCOMM_PATH不存在,说明该电脑安装过ActiveSync,并已经卸载。

                        RegistryKey keyWcescomm = Registry.LocalMachine.OpenSubKey(WCESCOMM_PATH);

                        if (keyWcescomm == null)

                            return false;

 

                        String Wcescomm_Path = (String)keyWcescomm.GetValue(null);

                        keyWcescomm.Close();

                        return Wcescomm_Path == null ? false : true;

                    }

                }

       

                #endregion

 

                /// <summary>

                /// 根据.ini文件部署程序到移动设备

                /// </summary>

                /// <param name="arg">.ini文件的绝对路径,每个路径前后要加"。多个程序中用空格分开。</param>

                public static void RunAppManager(String arg)

                {

                    //获取CeAppMgr.exe的注册表键

                    RegistryKey key = Registry.LocalMachine.OpenSubKey(CEAPPMGR_PATH);

                    if (key == null)

                        throw new ActiveSyncException(ActiveSyncException.UnFindCeAppMgr);

 

                    //获取CeAppMgr.exe的安装路径

                    String CeAppMgrFullFileName = key.GetValue("") as string;

                    if (CeAppMgrFullFileName == null)

                        throw new ActiveSyncException(ActiveSyncException.UnFindCeAppMgr);

 

                    //开始执行CeAppMgr.exe程序

                    Process.Start(String.Format("/"{0}/"", CeAppMgrFullFileName), arg);

                }

 

                /// <summary>

                /// 卸载移动设备中的程序

                /// </summary>

                public static void RunAppManager()

                {

                    RunAppManager("");

                }

 

                /// <summary>

                /// 安装ActiveSync软件

                /// </summary>

                /// <param name="FileName">ActiveSync安装程序的绝对完整路径</param>

                /// <returns></returns>

                public static Boolean SetupActiveSync(String FileName)

                {

                    try

                    {

                        //运行安装文件

                        Process SetupActiveSync = Process.Start(FileName);

 

                        while (!SetupActiveSync.HasExited)

                            System.Threading.Thread.Sleep(1000);

 

                        return IsHaveActiveSync;

                    }

                    catch (Win32Exception err)

                    {

                        throw new ActiveSyncException(String.Format("系统找不到指定的程序文件。/r{0}", err.Message));

                    }

                }

            }

        }

 

 

 

1
0
(请您对文章做出评价)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值