1. 程式人生 > >系統全面的教你做Windows Mobile程式的安裝程式

系統全面的教你做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

#regionproperty

///<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 (請您對文章做出評價)