再谈CAB打包
在M8上进行开发,很多人之所以用Wince_cab_manager来进行CAB打包的 主要的原因 恐怕是为了在M8的桌面显示中文。
(Windows Mobile SDK自带的CAB打包工具:Cabwiz.exe;cabwiz.ddf,不能正确解析.inf文件包含的中文)
刚开始,我也是这样想的,但是后来发现,M8的MiniOneShell是通过读取注册表来遍历显示桌面上的应用程序与图标的,
所以我们只要修改我们自己的注册表信息即可。
#define KXYZDesktopDisplayName (TEXT("软件名称"))
#define KXYZSoftWareAbb (TEXT("MYSW"))
HKEY hKey;
LPTSTR szSubKey = new TCHAR[MAX_PATH];
memset(szSubKey,0,sizeof(TCHAR)*MAX_PATH);
wcscpy_s(szSubKey,MAX_PATH,_T("SOFTWARE\\Meizu\\MiniOneShell\\Main\\"));
wcscat_s(szSubKey,MAX_PATH, KXYZSoftWareAbb );
LONG nResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,szSubKey,0,0,&hKey);
delete []szSubKey;
szSubKey = NULL;
if(ERROR_SUCCESS == nResult)
{
RegSetValueEx(hKey,_T("DisplayName"), 0, REG_SZ,
(LPBYTE)KXYZDesktopDisplayName,
wcslen(KXYZDesktopDisplayName)*sizeof(TCHAR));
RegCloseKey(hKey);
}
除了以上修改的地方,还需要修改一个地方,否则在M8上用优化精灵查看应用程序或者卸载的时候,看到的软件的名称还是英文字符的:
//以下两个字段的内容来自.inf文件
//故修改inf文件中的以下内容 也需要同时修改该部分
/*
* [Version]
* Signature="$Windows NT$"
* CESignature="$Windows CE$"
* Provider="your corporation"
*/
#define KXYZProviderName (TEXT("your corporation")) //
/*
* [CEStrings]
* AppName="ruanjianmingzi"
*/
#define KXYZAppName (TEXT("ruanjianmingzi"))
LPTSTR szAppSubKey = new TCHAR[MAX_PATH];
memset(szAppSubKey,0,sizeof(TCHAR)*MAX_PATH);
wcscpy_s(szAppSubKey,MAX_PATH,_T("SOFTWARE\\Apps\\"));
wcscat_s(szAppSubKey,MAX_PATH,KXYZProviderName);
wcscat_s(szAppSubKey,MAX_PATH,_T(" "));//space
wcscat_s(szAppSubKey,MAX_PATH,KXYZAppName);
HKEY hAppKey;
nResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
szAppSubKey,0,0,&hAppKey);
delete []szAppKey;
szAppKey = NULL;
if(ERROR_SUCCESS == nResult)
{
RegSetValueEx(hAppKey,_T("DisplayName"), 0, REG_SZ,
(LPBYTE)KXYZDesktopDisplayName,
wcslen(KXYZDesktopDisplayName)*sizeof(TCHAR));
RegCloseKey(hAppKey);
}
将以上代码放在SetupDll中的Install_Exit函数的末尾。
当然如果你担心安装程序没有自动刷新桌面的话,在M8上可以使用如下的API:(本人觉得以下的API主要用于通过RAPI来安装程序什么的)
1 /**
2 * @brief 通知Shell重新刷新桌面上的图标,用于安装程序后图标
3 * 更新
4 * @return TRUE, 成功; FALSE, 失败
5 */
6 BOOL ReloadDesktopIcons();
推而广之,Windows Mobile上的快捷方式,也可以通过修改快捷方式即可。
当然你需要写一个Setupdll。
浙公网安备 33010602011771号