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

本文详细介绍了如何使用WINRAR工具制作适用于Windows Mobile设备的软件安装包。通过遵循教程步骤,读者将了解如何配置设置,适配Wince路径,并利用向导完成打包过程。
摘要由CSDN通过智能技术生成
用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开发中提出。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值