系統全面的教你做Windows Mobile程式的安裝程式
今天第一次自文章,如果有寫的不好地方,還請各位高手多多指點。該文章絕對原創,歡迎各位朋友轉載(但是必須註明出處,尊重一下別人的勞動成果,這樣我才會有激情與動力為大家奉獻出更多更精彩的文章。)另外如果你覺得我這篇文章寫的好,請您支援我,並能把它轉給你身邊同樣做技術而且可能需要的人的。如果你認為我的文章寫的不好,麻煩你告訴我,我會改進的。如果你對移動開發那方面感興趣的話或有問題的話,也可以告訴我。雖然我不敢保證百分百的解決你的問題。不過也許你告訴我,說不定我能幫你解決。
今天我想和大家講解一下如何製作一WM專案的安裝程式。主要包括製作可以在智慧裝置上執行的.cab檔案、在桌面上執行的.exe檔案、包括對專案的加密處理、生成中文的安裝程式包。如果大家對這篇文章反應比較好的話。我後面還會寫一篇文章如果製作一個在桌面的電腦執行的程式,把移動專案和所有其他元件(比如:
話不多說,回到正題,簡單介紹一下整體思路:
1、建立智慧專案HelloWord。
2、使用Dotfuscator Community Edition為Helle Word程式生成的可執行檔案進行加密處理。(對可執行檔案進行混淆處理,否則原始碼能很容易的被反編譯出來)
3、建立智慧專案安裝程式HelloWordCAB。使用加密過的HelloWord的exe與dll生成智慧裝置安裝程式HelloWordCAB.CAB。
4、
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 Edition為Helle Word程式生成的可執行檔案進行加密處理。(對可執行檔案進行混淆處理,否則原始碼能很容易的被反編譯出來)
a)VS2008->工具->Dotfuscator Community Edition->建立新專案
b)Dotfuscator->輸入將剛剛生成的HelloWord.exe新增進來
c)Dotfuscator->重新命名中選擇需要混淆的內容
d)Dotfuscator->生成中選擇目標目錄後點擊“生成”生成記過加密的HelloWord.exe
3、建立智慧專案安裝程式HelloWordCAB。使用加密過的HelloWord的exe與dll生成智慧裝置安裝程式HelloWordCAB.CAB。
a)建立一個新“智慧裝置CAB專案” HelloWordCAB。
b)把剛剛加密過的HelloWord.exe檔案新增到需要部署的目錄中。
c)編譯專案HelloWordCAB 並生成英文的移動裝置CAB安裝包HelloWordCAB.CAB
4、使用使用軟體WinCE CAB Manager把HelloWordCAB.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)用WindowsSetup把HelloWordCAB_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_MACHINE中ActiveSync程式在登錄檔中的位置
///</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_MACHINE中ActiveSync程式的安裝路徑
///</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 (請您對文章做出評價)