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 サポートを含む)
-Symbol WM5 デバイス - MC70
-Windows Mobile デバイス センター-
カスタム DLL を介して CF2 CAB とアプリの CAB をインストールするデスクトップ MSI を作成 -
インストール中 (管理者として実行)私のアプリのCABは正常にインストールされ、CF2 CABには「インストールに失敗しました」と
表示されます-ただし、VS2008からアプリを実行/デバッグすると、CF2が正しく展開されるため、機能します。

興味深い情報:
ファンキーな CF2 CAB をデバイスから取り出して、ソースと比較しました。次の場所にあります。

C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\wce500\armv4i\NETCFv2.wm.armv4i.cab

驚いたことに、デバイスの CAB には、ソースとは異なる 2 つの HEX バイトがありました。初めから:

4D 53 43 46 00 00 00 00 68 48 (プルバックから) 残りは同じ
4D 53 43 46 00 00 00 00 50 22 (ソースから) 残りは同じ

「68 48」CAB を「50 22」CAB に置き換え、デバイスで手動で起動すると、問題なくインストールされます。私の質問は、宛先デバイスに到達すると、ソース キャブがわずかに変更されるのはなぜですか? それ以外は、ファイルは同じです。

私が試したその他のこと:
WM5/CF2 を対象とする小さなアプリをゼロから作成します。CAB プロジェクトの追加、Setup & Deploy プロジェクトの追加。XP からセットアップを実行します。Win7 からセットアップを実行してください。

/Device root には CF2 インストール ログが含まれていません。そこまでは行きません。
VOLATILE/Setup.log に「エラー」は含まれていません。

また、UberCab アプローチ (複数の CAB を 1 つの CAB にまとめる) も試しました。ただし、デバイスでアンバンドルする場合: BOOMは失敗します。それはなんとなくわかる。

私は機知に富んでいます。CF2の部分はうまくいくはずです。

-トム

4

1 に答える 1

0

CAB インストーラー SDK のソース コードを振り返ってみると、CAB の先頭が固定サイズのヘッダーであることがわかります。ご覧のとおり、最初の DWORD は CAB 署名 (0x4643534d リトルエンディアン) です。2 番目の DWORD は予約済みのセットで、この場合はすべてゼロです。次のDWORDは CAB のサイズです。下位の単語のみを表示していますが、その差はほぼ 10k (0x4868 - 0x2250 = 0x2618) です。ファイルの末尾を超えたデータを探しているため、CAB デコンプレッサが失敗する原因となっている可能性があります。

なぜそれが変化しているのか、私にはわかりません。MSI で CAB のソースを確認しましたか? 別のツールで MSI を開き、CAB を引き出して、そこにあるかどうかを確認しましたか? 基本的に、ソース側の CAB が間違っているのでしょうか (おそらくそう思います)、それとも移動時に変更されているのでしょうか?

于 2011-05-11T15:31:51.557 に答える