系統全面的教你做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
(請您對文章做出評價)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章