0

我最近將VS2005的WinMobile5應用程序升級到了VS2008。該解決方案還包含一個CAB構建器項目和一個MSI Desktop Installer項目。來自安裝程序的自定義DLL負責將應用程序和支持的CAB(如Compact Framework 2.0,掃描程序庫等)部署到實際設備。Mobile Compact Framework 2.0從VS2008生成的Win7安裝失敗

我用本文作爲MSI安裝的引導:
http://msdn.microsoft.com/en-us/library/aa446504.aspx

問題是,該CF2 CAB將無法成功運行的Setup.exe/MSI文件時安裝到從一個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 \ 2.0 \ Windows CE的\ wce500 \ armv4i \ NETCFv2.wm.armv4i.cab

令我驚訝的是,設備CAB有兩個不同於源的HEX字節。從開始:

4D 53 43 46 00 00 00 00 (從拉回)其餘是相同
4D 53 43 46 00 00 00 00 (從Source)其餘是相同

當我用「50 22」CAB替換「68 48」CAB並在設備上手動啓動時,它安裝得很好。所以我的問題是:爲什麼信號源一旦到達目的地設備?除此之外,這些文件是相同的。

我試過的其他東西:
從零開始創建一個針對WM5/CF2的小應用程序。添加一個CAB項目,添加一個安裝程序&部署項目。從XP運行安裝程序,太棒了!從Win7運行安裝程序,BOOM!

/設備根目錄不包含CF2安裝日誌。沒有那麼遠。
VOLATILE/Setup.log不包含「錯誤」。

我也嘗試了UberCab方法(將多個CAB綁定到一個CAB中)。但是,在設備上拆分時:BOOM失敗。它以某種方式知道。

我在我的智慧結束。 CF2片應該可以工作。

-Tom

回答

0

回首的CAB安裝SDK我的源代碼,我看到駕駛室的開始是一個固定大小的頭。就像你看到的那樣,第一個DWORD是一個CAB簽名(0x4643534d little-endian)。第二個DWORD是一個保留集,在你的情況下它是全零。下一個DWORD是CAB的大小 - 您只顯示較低的字,但差異接近10k(0x4868 - 0x2250 = 0x2618)。這可能會導致CAB解壓縮程序失敗,因爲它正在查找文件末尾的數據。

現在爲什麼這是在改變我不知道。您已經在MSI中驗證了CAB的來源?你是否已經用另一種工具開啓了MSI,並將CAB拿出來看看它是否正確?基本上CAB在源端是錯誤的(很可能我認爲),或者移動時它會被修改?

+0

ctacke - 正如你所建議的那樣,我使用7-zip從MSI拉出了CF2駕駛室。 BeyondCompare說,與來源相同。然而,在我的帖子中所描述的設備上它已經改變了。此時,我懷疑我的箱子。將做測試安裝在其他機器上。謝謝你的幫助。 - 湯姆 – 2011-05-12 21:07:00

+0

後續活動 - 在http://www.christec.co.nz/blog/archives/61上傳出。在底部附近,它表示「通過ActiveSync傳輸的CAB文件可以在傳輸過程中進行更改」。指向一個MSDN文章,指出簽名的CAB看起來更小,所以它通過更改第三個DWORD來指定實際大小來排除它們。 – 2011-05-12 21:27:20