Windows CE/Pocket PC安装盘的制作
by blackcolor 2002.02.21
工作环境为:Microsoft EMBDVTOOLS 3.0、Microsoft ActiveSync 3.1、Windows 98SE、Microsoft Visual C++ 6.0,
PDA是联想天玑3000(Windows CE 3.0版本、CPU是ARM SA1110)
Windows CE/Pocket PC安装盘的制作可分为以下几个步骤,在详细说明之前,假设在C:已经建立一个目录sample,
里面有已经编译好的EXE文件sample.exe(放在sample的子目录source下)和一个ico文件sample.ico。
一、准备一个inf文件(Sample.inf),放在c:\sample下,其格式如下:
; PDA安装文件:Sample.inf
;
[Version]
Signature = "$Windows NT$"
Provider = "你的公司名称"
CESignature = "$Windows CE$"
[CEStrings]
AppName = "你的应用程序名称"
InstallDir = %CE1%\%AppName%
[CEDevice]
ProcessorType = 2577 ; CPU类型为ARM SA11xx
[SourceDisksNames]
1 = ,"Common files",,source ; 源文件在在C:\Sample\source下
[SourceDisksFiles]
sample.exe = 1 ; 已经编译好的EXE文件
[DefaultInstall]
CopyFiles = Files.InstallDir
AddReg = RegData
CEShortcuts = Links
[DestinationDirs]
Files.InstallDir = ,%InstallDir%
Links = ,%CE11%
DefaultDestDir = ,%InstallDir%
[Files.InstallDir]
"porder.exe",porder.exe ; 将拷贝的文件
[RegData]
HKLM,Software\Microsoft\%AppName%,MajorVersion,0x00010001,1
HKLM,Software\Microsoft\%AppName%,MinorVersion,0x00010001,0
[Links]
"快捷方式名称",0,sample.exe,%CE17% ; 在开始菜单创建快捷方式
二、用CabWiz.exe制作一个CAB包,CabWiz.exe文件在目录
%evtoolsdir%\Windows CE Tools\wce300\MS Pocket PC\support\ActiveSync\windows ce application installation\cabwiz
下,其中%evtoolsdir%是Microsoft EMBDVTOOLS 3.0的安装目录,在该目录的上级目录中有一文件buildcab.bat,
把buildcab.bat拷贝到c:\sample,修改为:
@echo off
REM
REM Sample batch file used to compile the CabWiz INF file
REM
REM
REM Replace <CabWiz-Path> with the full path to the CabWiz.exe file
REM Replace <INF-Path> with the full path to the Sample.INF file
REM
REM 请在文件"sample.inf"上面加上一对""号
REM 下面的命令应该是一行
"%evtoolsdir%\Windows CE Tools\wce300\MS Pocket PC\supportActiveSync\windows ce application installation\cabwiz\CabWiz.exe" "sample.inf" /err err.log
修改完毕之后,就可以执行buildcab.bat文件,该文件将生成sample.cab。
三、制作一个ini文件install.ini,放在c:\sample下,如下:
[CEAppManager]
Version = 1.0
Component = Sample
[POrder]
Description = 说明文字
IconFile = Sample.ico
IconIndex = 0
DeviceFile = Sample.exe
CabFiles = Sample.CAB
四、把PDA连上Windows 98SE,进入MS DOS方式,进入Microsoft ActiveSync 3.1的安装目录
C:\Program Files\Microsoft ActiveSync,运行如下命令:
C:\Program Files\Microsoft ActiveSync>ceappmgr c:\sample\install.ini
将启动安装程序,把Sample.exe安装到PDA上。如果觉得每次这样安装麻烦,请参照步骤五。
五、使用VC6创建一个简单的安装引导程序
1.打开vc6新建一个工程,在Projects标签选择Win32 Application,“Project Name”
输入install。
2.第二步选择“An empty project”,按Finish按钮。
3.新建一个文件install.cpp,并加入工程,内容如下:
// --------------------------------------------------
// PDA 安装程序(Pocket PC)
// --------------------------------------------------
#include <windows.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <shellapi.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// 取自身的路径
char szPath[MAX_PATH];
GetModuleFileName(NULL, szPath, MAX_PATH-1);
// 转换成ini文件名
int iLen = strlen(szPath);
strcpy(&szPath[iLen-3], "ini");
// 取CEAppMgr.exe的全路径
HKEY hResult;
char szCEAppMgr[]="software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\CEAppMgr.exe";
LONG iRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE, szCEAppMgr, NULL, KEY_READ, &hResult);
BYTE szCEAppMgrExe[MAX_PATH*2+1];
if(iRet==ERROR_SUCCESS)
{
DWORD cbName, dwType;
cbName = MAX_PATH;
dwType = REG_SZ;
iRet = RegQueryValueEx(hResult, NULL, NULL, &dwType, szCEAppMgrExe, &cbName);
RegCloseKey(hResult);
}
if (iRet!=ERROR_SUCCESS)
{
MessageBox(NULL, "请先安装Microsoft ActiveSync软件!", "错误", MB_ICONERROR);
return 1;
}
char szExe[MAX_PATH*2+2];
strcpy(szExe, (char *)szCEAppMgrExe);
// 开始安装
SHELLEXECUTEINFO ExecInfo ;
memset((char *)&ExecInfo, 0, sizeof(ExecInfo));
ExecInfo.cbSize = sizeof(ExecInfo);
ExecInfo.fMask = SEE_MASK_CLASSKEY;
ExecInfo.hwnd = NULL;
ExecInfo.lpFile = szExe;
ExecInfo.lpParameters = szPath;
ExecInfo.nShow = SW_SHOW;
ShellExecuteEx(&ExecInfo);
return 0;
}
4.将编译后的EXE文件install.exe,拷贝到c:\sample目录,运行install.exe
将自动安装上面的软件。
六、说明
1.更详细的资料请参考Microsoft EMBDVTOOLS 3.0的联机帮助,
Microsoft EMBDVTOOLS 3.0可以由微软网站免费获得。
2.我手里只有一个PDA,对其他型号的PDA我没有进行测试。
3.本文版权归原作者所有,其它网站转载请注明出处并保持本文的完整性,
传统媒体转载须事先与原作者联系,bug与建议请一并发至blackcolor@263.net。