我最近将针对WinMobile5应用的VS2005解决方案升级到了VS2008。该解决方案还包含一个CAB构建器项目和一个MSI Desktop Installer项目。安装程序中的自定义DLL负责将应用程序以及支持的CAB(如Compact Framework 2.0,扫描程序库等)部署到实际设备。
我用这篇文章作为MSI安装的指南:
http://msdn.microsoft.com/en-us/library/aa446504.aspx
问题是,运行Setup.exe / MSI文件时,CF2 CAB无法从Win7成功安装到WM5设备。但是,从XP安装工作正常。
要点:
-Windows7 32位机器 - VS2008 / WM6 SDK(包括WM5支持)
-Symbol WM5设备 - MC70
-Windows移动设备中心
-Created桌面MSI安装CF2 CAB加我的应用程序的CAB通过自定义DLL
- 在安装(以管理员身份运行)我的应用程序的CAB安装成功时,CF2 CAB说“安装失败”
- 但是,从VS2008运行/调试应用程序将正确部署CF2,因此它可以正常工作。
有趣的花絮:
我从设备中取出了时髦的CF2 CAB,与源码进行比较,位于:
C:\ Program Files \ Microsoft.NET \ SDK \ CompactFramework \ v2.0 \ WindowsCE \ wce500 \ armv4i \ NETCFv2.wm.armv4i.cab
令我惊讶的是,设备CAB有两个不同于源的HEX字节。从一开始:
4D 53 43 46 00 00 00 00 68 48 (来自Pullback)休息相同
4D 53 43 46 00 00 00 00 50 22 (来自Source)休息是相同的
当我用“50 22”CAB替换“68 48”CAB并在设备上手动启动时,它安装得很好。所以我的问题是:为什么源出租车一旦到达目的地设备就会略有改变?除此之外,文件是相同的。
我尝试过的其他事情:
从头开始创建一个针对WM5 / CF2的小应用程序。添加一个CAB项目,添加一个安装程序&部署项目。从XP运行安装程序,太棒了!从Win7,BOOM运行安装程序!
/设备根目录不包含CF2安装日志。没那么远。
VOLATILE / Setup.log不包含“错误”。
我也尝试过UberCab方法(将多个CAB捆绑到一个CAB中)。但是,在设备上拆分时: BOOM 会失败。它以某种方式知道。
我的智慧结束了。 CF2应该可以工作。
-Tom
答案 0 :(得分:0)
回顾我的CAB安装程序SDK的源代码,我看到CAB的开头是固定大小的标头。第一个DWORD是一个CAB签名(0x4643534d little-endian)就像你看到的那样。第二个DWORD是一个保留集,在您的情况下全部为零。下一个 DWORD 是CAB的大小 - 你只显示低位字,但差别接近10k(0x4868 - 0x2250 = 0x2618)。这可能导致CAB解压缩程序失败,因为它正在查找文件末尾的数据。
现在为什么正在改变我不知道。您已经在MSI中验证了CAB的来源?你有没有在另一个工具中打开MSI并拔出CAB以确定它是否正确?基本上CAB在源端是错误的(很可能是我认为),还是在移动时会被修改?