用WINRAR制作Windows Mobile软件PC端安装包

确定你已经会制作微软CAB格式的安装包
这里就不用我多说了,在微软的帮助文件,MSDN中,大量地介绍如何编写.inf,如何打包等等。比如EVC helps里面搜索 cabwiz 或 .inf 关键词就可以找到相关方法。
比如现在你已经做好了一个Sample.CAB安装包。
安装了WINRAR
这个可以去网上下载,记得用正版。当然,也可以用WINZIP或任何能制作自解压(SFX)的压缩软件。
编写一个.INI文件
文件的内容很简单,用记事本写好后,保存为Sample.ini
[CEAppManager]
Version = 1.0
Component = Sample
[Sample]
Description = 安装包示例
Uninstall    = Sample
CabFiles     = ./Sample.CAB
准备好 InstallPackage.exe
InstallPackage.exe 是我写的一个小程序,原理是通过查找注册表中CEAPPMGR.EXE 文件的位置,这个文件就是ActiveSync中用来安装程序的组件,然后以参数方式执行安装。程序源码如下,编译环境是VC6.0,不过使用源代码的朋友要注意,我用的是UNICODE,而不是VC默认的MBCS宏,所以,记得在工程C/C++选项中去掉
MBCS,改为 _UNICODE,UNICODE 替代。当然,不喜欢的朋友可以自行修改源代码,如果需要编译好的文件,请发到我的邮箱 nbcool@yeah.net 索取。这里要提醒下大家,带参数执行 InstallPackage.exe ./xxx.ini 中,”./” 当前路径符号是必不可少的。
// InstallPackage.cpp : Defines the entry point for the application.
//
#include <windows.h>
#include <tchar.h>
LRESULT GetCeAppMgrPath(LPTSTR * lpszPath);
int APIENTRY WinMain(HINSTANCE hInstance,
                      HINSTANCE hPrevInstance,
                      LPSTR      lpCmdLine,
                      int        nCmdShow)
{
          TCHAR szlpFile[MAX_PATH + 1];
          DWORD dwLen = strlen(lpCmdLine);         //.ini file full path
          LPTSTR lpszCeAppMgr = NULL;
          if(dwLen > 0)
          {
                    if(MultiByteToWideChar(CP_ACP,0, lpCmdLine, -1, szlpFile, MAX_PATH) != FALSE)
                    {
                             if(SUCCEEDED(GetCeAppMgrPath(&lpszCeAppMgr)))
                             {
                                 SHELLEXECUTEINFO execInf;
                                 ZeroMemory (&execInf, sizeof (execInf));
                                 execInf.cbSize = sizeof (execInf);
                                 execInf.fMask = SEE_MASK_NOCLOSEPROCESS;
                                 execInf.lpFile = lpszCeAppMgr;
                                 execInf.lpVerb = TEXT("open");
                                 execInf.lpParameters = szlpFile;
                                     
                                 if(ShellExecuteEx (&execInf) != FALSE)
                                      {
                                                //do nothing
                                                //
                                      }
                                      else
                                      {
                                             MessageBox(NULL, _T(" 安装程序启动失败 "), _T("Setup Wizard"), MB_OK|MB_ICONERROR);
                                      }
                             }
                             else
                             {
                                       MessageBox(NULL, _T(" 组件丢失 安装失败 "), _T("Setup Wizard"), MB_OK|MB_ICONERROR);
                             }
                    }
          }
          if(lpszCeAppMgr != NULL)
          {
                    LocalFree((HLOCAL)lpszCeAppMgr);
          }
                   
          return 0;
}
LRESULT GetCeAppMgrPath(LPTSTR * lpszPath)
{
         
         HKEY hKey = NULL;
         DWORD dwLength = 0;
         DWORD dwRegType = 0;
         LRESULT lr = S_FALSE;
             LPTSTR lpszBuf = NULL;
    
          lr = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
             TEXT("SOFTWARE//Microsoft//Windows//CurrentVersion//App Paths//CEAPPMGR.EXE"),
             0, KEY_QUERY_VALUE, &hKey);
          if (lr != ERROR_SUCCESS)
          {
                    goto Exit;
          }
         
          dwLength = 0;
          lr = RegQueryValueEx(hKey, _T(""), NULL, &dwRegType, NULL, &dwLength);
          if (lr != ERROR_SUCCESS)
          {
                    goto Exit;
          }
         
          lpszBuf = (LPTSTR)LocalAlloc(LMEM_FIXED, dwLength * sizeof(TCHAR));
                   
          if(lpszBuf != NULL)
          {
                    lr = RegQueryValueEx(hKey, _T(""), NULL, &dwRegType, (LPBYTE)(lpszBuf), &dwLength);
                   
                    if (lr != ERROR_SUCCESS)
                    {
                             goto Exit;
                    }
          }
Exit:
          if (hKey != NULL)
          {
                   
                    RegCloseKey(hKey);
          }   
         
          *lpszPath = lpszBuf;
         
          return lr;
}
准备一个安装文件的图标
这是用了cesetup.ico,看自己的需要了。
开始制作安装包
首先以上文件放入同一文件夹,名字随意。
Sample.CAB
Sample.ini
cesetup.ico
InstallPackage.exe
选取文件,并选择添加到压缩文件
选择创建自解压格式压缩文件
设置自解压选项
其后选择确定完成生成安装包
至此,本文已结束,大家有关于制作过程的疑问,可以在嵌入式板块 WINCE开发中提出。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值