0

我最近将 WinMobile5 应用程序的 VS2005 解决方案升级到 VS2008。该解决方案还包含一个 CAB 构建器项目和一个 MSI 桌面安装程序项目。来自安装程序的自定义 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 支持)
-符号 WM5 设备 -MC70 -Windows
移动设备中心-
创建桌面 MSI 以通过自定义 DLL 安装 CF2 CAB 以及我的应用程序的 CAB -
安装期间(以管理员身份运行)我的应用程序的 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 项目,添加 Setup & Deploy 项目。从 XP 运行安装程序,太棒了!从 Win7 运行安装程序,BOOM!

/Device root 不包含 CF2 安装日志。没那么远。
VOLATILE/Setup.log 不包含“错误”。

我还尝试了 UberCab 方法(将多个 CAB 捆绑到一个 CAB 中)。但是,在设备上解绑时:BOOM失败。它不知何故知道。

我无计可施。CF2 件应该可以正常工作。

-汤姆

4

1 回答 1

0

回顾我的 CAB 安装程序 SDK 的源代码,我发现 CAB 的开头是一个固定大小的标头。如您所见,第一个 DWORD 是 CAB 签名(0x4643534d little-endian)。第二个 DWORD 是保留集,在您的情况下是全零。下一个DWORD是 CAB 的大小 - 您只显示较低的字,但差异接近 10k (0x4868 - 0x2250 = 0x2618)。这可能会导致 CAB 解压缩器失败,因为它正在查找文件末尾之后的数据。

现在为什么会改变我不知道。您已在 MSI 中验证了 CAB 的来源?您是否在其他工具中打开 MSI 并拉出 CAB 以查看它是否在其中?基本上是源端的 CAB 错误(我认为很可能),还是在移动时它被修改了?

于 2011-05-11T15:31:51.557 回答