บทความนี้เป็นการแสดงถึงตัวอย่าง การสร้างโปรแกรม setup ที่ใช้ในการติดตั้งโปรแกรม PDA ที่นักพัฒนาได้ทำการสร้างขึ้นมา โดยมากแล้ววิธีการนำโปรแกรมบน PDA ไปติดตั้งนั้น สามารถกระทำได้หลายวิธี เช่นการสร้างเป็น cab file และให้ผู้ใช้คำการ คัดลอกไปไว้ในเครื่อง PDA แล้วทำการติดตั้ง นอกจากนั้นแล้ว ยังมีโปรแกรมติดตั้งที่เป็นไฟล์ EXE ซึ่งหัวข้อนี้ เราจะได้มาเรียนรู้ถึง ลำดับขั้นตอน และวิธีการทำโปรแกรมติดตั้งดังกล่าว กันต่อไป
เริ่มจาก นักพัฒนาได้มีการพัฒนาโปรเจค ที่เป็นโปรแกรม สำหรับ Pocket PC 2003 ด้วย Visual Studio 2005 ดังรูป
ลำดับขั้นตอนในการสร้างโปรแกรมติดตั้ง จะมีด้วยกันดังนี้
- สร้าง Cab Project
- สร้าง Installer DLL
- สร้าง INI File
- สร้าง MSI
Cab Project จะเป็นการสร้างไฟล์ที่ประกอบด้วยไฟล์อื่นๆที่อยู่ภายใน เช่นเดียวกับไฟล์ zip,jar, rar โดยลักษณะของ cab file อาจจะประกอบด้วย ไฟล์ที่ถูกพัฒนาขึ้นโดยนักพัฒนา และจำเป็นต้องใช้ประกอบกับโปรแกรม ที่พัฒนาขึ้น เช่นไฟล์ exe,dll,sdf,bmp
ในการสร้างจะเริ่มจาก การคลิกเลือกที่เมนู File > Add > new Project ของโปรแกรม Visual Studio 2005
เลือก Other Project Types > Setup and Deployment > Smart Device CAB Project และกำหนด Name เป็น sampleCab คลิกปุ่ม OK เพื่อยืนยันการทำงานดังรูป
คลิกขวาที่โปรเจค sampleCab และเลือก Add Project Output... จะปรากฏหน้าต่างดังรูป
ทำการเลือกProject เป็น sampleApp ซึ่งเป็นโปรเจคของโปรแกรมที่นักพัฒนาสร้างขึ้น แล้วทำการเลือก Primary output และคลิกที่ปุ่ม OK เพื่อยืนยัน ก็จะทำให้มีรายการของไฟล์ ระบบ และไฟล์อื่นๆ ที่โปรเจคต้องใช้ แสดงอยู่ดังรูปด้านล่าง
*** ในกรณีที่โปรแกรมของนักพัฒนา มีการเรียกใช้งานไฟล์อื่นๆที่อยู่ใน โปรเจค เช่นไฟล์ bmp(ไฟล์รูปภาพ) หรือไฟล์ sdf(ไฟล์ฐานข้อมูล) ให้นักพัฒนานำเข้าไฟล์ดังกล่าว โดยทำการเลือกนำเข้าอีกรอบ โดยเลือกที่ Content Files
ให้คุณคลิกขวาที่โปรเจค sampleCab และเลือก Properties จะปรากฏหน้าต่าง ขึ้นมา จากหน้าต่างใหม่ ให้เลือก Configuration เป็น Release ในช่อง Out put file name จะแสดงชื่อ cab file ที่จะถูกสร้างขึ้นมา ดังรูป
ทำการคลิกปุ่ม Configuration Manager... จะปรากฏหน้าต่าง ขึ้นมา ให้คุณทำการเลือก Active Solution Configuration เป็น Release และคลิกปุ่ม Close เพื่อปิดหน้าต่าง ดังรูป
นอกจากนี้ Cab Project ที่สร้างขึ้น ยังมีความสามารถให้ผู้พัฒนากำหนดค่าลงใน Registryของเครื่องที่จะถูกติดตั้งโปรแกรม ผ่านทางหน้าต่าง Registry Editor ดังแสดงในรูป
ให้คุณทดสอบสร้าง cab file โดยคลิกขวาที่โปรเจค sampleCab และเลือกที่ Build.. ดังรูป
cab file จะถูกสร้างและเก็บไว้ตามค่าของ Out put file name ที่ได้มีการกำหนดไว้ก่อนหน้านี้ ดังรูป
มาถึงตอนี้คุณก็มี cab file ที่จะใช้ในการสร้างโปรแกรมติดตั้งไว้แล้ว
เป็นการสร้างไฟล์ dll ที่ใช้ในการควบคุมกระบวนการในการติดตั้ง โดยโค้ดที่ใช้จะเป็น ภาษา C#
เริ่มต้นโดยคลิกเลือกที่เมนู File > Add > New Project เมื่อปรากฏหน้าต่าง New Project ให้คุณทำการเลือก Visual C# > Windows > Class Library และกำหนด Name ให้มีค่าเป็น InstallerDLL ดังรูป
จะมีโปรเจคใหม่ที่ชื่อ installerDLL ปรากฏขึ้นมา ให้คุณทำการคลิกขวาที่ไฟล์ Class1.cs และเลือก Delete
จากนั้นทำการคลิกขวาที่โปรเจค InstallerDLL แล้วเลือก Add > New Item จะปรากฏหน้าต่างใหม่ ให้ทำการเลือก Installer Class แล้วกำหนดชื่อไฟล์เป็น CustomInstaller.cs ดังรูป
จากนั้นให้ทำการแก้ไขโค้ดของไฟล์ CustomInstaller.cs ดังนี้
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using Microsoft.Win32;
using System.IO;
namespace InstallerDLL
{
[RunInstaller(true)]
public partial class CustomInstaller : Installer
{
private const string CEAPPMGR_PATH = @"SOFTWAREMicrosoftWindowsCurrentVersionApp PathsCEAPPMGR.EXE";
private const string ACTIVESYNC_INSTALL_PATH = @"SOFTWAREMicrosoftWindows CE Services";
private const string CEAPPMGR_EXE_FILE = @"CEAPPMGR.EXE";
private const string CEAPPMGR_INI_FILE = @"sampleApp.ini";
private const string APP_SUBDIR = @"sampleApp";
private string TEMP_PATH = Environment.SystemDirectory + @"TEMPsampleApp";
public CustomInstaller()
{
InitializeComponent();
this.BeforeInstall += new InstallEventHandler(CustomInstaller_BeforeInstall);
this.AfterInstall += new InstallEventHandler(CustomInstaller_AfterInstall);
this.BeforeUninstall += new InstallEventHandler(CustomInstaller_BeforeUninstall);
}
private string GetAppInstallDirectory()
{
// get the ActiveSync install directory
RegistryKey keyActiveSync = Registry.LocalMachine.OpenSubKey(ACTIVESYNC_INSTALL_PATH);
if (keyActiveSync == null)
{
throw new Exception("ActiveSync is not installed.");
}
// build the target directory path under ActiveSync
string activeSyncPath = (string)keyActiveSync.GetValue("InstalledDir");
string installPath = activeSyncPath + APP_SUBDIR;
keyActiveSync.Close();
return installPath;
}
void CustomInstaller_BeforeInstall(object sender, InstallEventArgs e)
{
// find where we're going to be installed
string installPath = GetAppInstallDirectory();
// create the target directory
Directory.CreateDirectory(installPath);
// copy our app files to the directory
foreach (string installFile in Directory.GetFiles(TEMP_PATH))
{
File.Copy(installFile, Path.Combine(installPath,Path.GetFileName(installFile)), true);
}
// get the path to ceappmgr.exe
RegistryKey keyAppMgr = Registry.LocalMachine.OpenSubKey(CEAPPMGR_PATH);
string appMgrPath = (string)keyAppMgr.GetValue(null);
keyAppMgr.Close();
// run CeAppMgr.exe to install the files to the device
System.Diagnostics.Process.Start(appMgrPath,""" + Path.Combine(installPath, CEAPPMGR_INI_FILE) + """);
}
void CustomInstaller_AfterInstall(object sender, InstallEventArgs e)
{
// delete the temp files
foreach (string tempFile in Directory.GetFiles(TEMP_PATH))
{
File.Delete(tempFile);
}
}
void CustomInstaller_BeforeUninstall(object sender, InstallEventArgs e)
{
// find where we are installed
string installPath = GetAppInstallDirectory();
// delete the files
foreach (string appFile in Directory.GetFiles(installPath))
{
File.Delete(appFile);
}
// delete the folder
Directory.Delete(installPath);
}
}
} |
ให้คุณแก้ไขโค้ดในส่วนที่เป็นสีแดง ให้เป็นไปตามชื่อโปรแกรมที่ต้องการติดตั้ง ซึ่งในบทความนี้ผมมีโปรเจค sampleApp ไว้เพื่อแสดงตัวอย่าง
ขณะนี้คุณสามารถคลิกขวาที่โปรเจค InstallerDLL แล้วเลือก Build เพื่อสร้างไฟล์ dll สำหรับควบคุมขั้นตอนการติดตั้ง โดยไฟล์ดังกล่าวจะเก็บไว้ที่ sampleAppInstallerDLLinRelease ดังรูป
ให้คุณทำการสร้างไฟล์ sampleApp.ini ไว้ใน โปรเจค sampleApp โดยอาจจะสร้างเป็น text file ก่อนแล้วค่อย rename ไฟล์มาเป็น sampleApp.ini ก็ได้ ซึ่งมีรายละเอียดของข้อมูลภายในไฟล์ดังต่อไปนี้
[CEAppManager]
Version = 1.0
Component = sampleApp
[sampleApp]
Description = Sample Application for PDA
CabFiles = sampleCab.cab |
คุณจะสังเกตุได้ว่า CabFiles มีค่าเป็นชื่อของ cab file ที่ได้จากโปรเจค sampleCab นั่นเอง
ไฟล์ msi เป็นไฟล์ติดตั้งประเภทนึง ที่พบเห็นกันโดยทั่วไป ซึ่งวิธีการในการสร้างไฟล์ดังกล่าวจะมีลำดับขั้นตอนดังต่อไปนี้
เริ่มจาก เลือกเพิ่มโปรเจคใหม่ จากเมนู File > Add > New Project จากนั้นเลือก Project types เป็น Setup and Deployment > Setup Project และกำหนด Name เป็น DeploymentMSI ดังรูป
ที่แท็ป File System(DeploymentMSI) ให้ทำการคลิกขวาที่ Application Folder แล้วเลือก Add > Project Output... ดังรูป
จะปรากฏหน้าต่าง ขึ้นมา ให้ทำการเลือก Project เป็น InstallerDLL และเลือกด้านล่างเป็น Primary output คลิกปุ่ม OK เพื่อยืนยัน ดังรูป
ที่แท็ป File System(DeploymentMSI) ให้ทำการคลิกขวาที่ ช่องว่าง แล้วเลือก Add Special Folder > System Folder ดังรูป
จากนั้นทำการคลิกขวาที่ System Folder เลือก Add > Folder กำหนดชื่อเป็น Temp ดังรูป
คลิกขวาที่โฟลเดอร์ Temp ทำการเลือก Add > Folder กำหนดชื่อเป็น sampleApp ดังรูป
คลิกขวาที่โฟลเดอร์ sampleApp ทำการเลือก Add > Project output... จะปรากฏหน้าต่างใหม่ขึ้นมา ให้คุณทำการเลือก Project เป็น sampleCab และทำการคลิกปุ่ม OK ดังรูป
คลิกขวาที่โฟลเดอร์ sampleApp อีกครั้ง ทำการเลือก Add > File จากนั้นให้ทำการไปเลือกไฟล์ sampleApp.ini ซึ่งเป็นไฟล์ที่ได้มีการสร้างไว้ ในกระบวนการ สร้าง INI File ผลที่ได้จะแสดงดังรูป
กระบวนการต่อมา จะเป็นการนำเข้า InstallerDLL เพื่อนำมาใช้ควบคุมการติดตั้งของโปรแกรม
โดยเริ่มจาก ทำการคลิกขวาที่โปรเจค DeploymentMSI และเลือก View > Custom Actions ดังรูป
จะปรากฏแท็ป Custom Actions ขึ้นมา ให้ทำการคลิกขวาที่ไอคอน Custom Actions แล้วเลือก Add Custom Action ดังรูป
ที่หน้าต่าง Select Item in Project ให้คุณดับเบิ้ลคลิกที่ Application Folder จะปรากฏรายการของ Primary output from InstallDLL (Active) จากนั้นนั้นให้คลิกปุ่ม OK เพื่อยืนยัน ดังรูป
ผลที่ได้คือ มีการนำเข้ากระบวนการทำงานจาก InstallerDLL เข้ามาดังรูป
กระบวนการสุดท้ายคือ ให้คุณทำการคลิกขวาที่โปรเจค DeploymentMSI จากนั้นให้เลือก Build แล้วรอจนกระทั่ง Build succeeded
ผลจากการ ดำเนินการนี้เราจะได้ไฟล์ 2 ไฟล์ คือ msi และ exe ดังแสดงในรูป
ทิ้งทาย
ตัวอย่างจากบทความนี้ คงสามารถนำไปใช้เป็นแนวทางในการสร้างโปรแกรมติดตั้งบน PDA ได้ สำหรับการประยุกต์ใช้ ในบางครั้งต้องการการ แก้ไขค่าของข้อมูลต่างๆ ซึ่งอาจจะประสบปัญหาในเบื้องต้น แต่หากว่าคุณได้ซ้อมมือ ทำตามบทความนี้แล้ว ก็คงพอจะช่วยให้การทำงานของคุณง่ายขึ้นครับ ก็หวังว่าคงเป็นประโยชน์ไม่มากก็น้อย สำหรับเพื่อนๆนักพัฒนาทุกท่าน แล้วพบกันใหม่กับ 9'M |