Mobile Compact Framework 2.0 Неудачная установка из Win7, созданной из VS2008 - PullRequest
0 голосов
/ 11 мая 2011

Я недавно обновил решение VS2005 для приложения WinMobile5 до VS2008. Решение также содержит проект CAB Builder и проект MSI Desktop Installer. Пользовательская DLL из установщика заботится о развертывании приложения и поддержке CAB-файлов, таких как Compact Framework 2.0, библиотеки сканеров и т. Д. На реальном устройстве.

Я использовал эту статью в качестве руководства по установке MSI:
http://msdn.microsoft.com/en-us/library/aa446504.aspx

Проблема в том, что CAB CF2 не может быть успешно установлен на устройство WM5 из Win7 при запуске файла Setup.exe / MSI. Однако установка из XP работает нормально.

Резюме:

-Windows7 32-битный компьютер - VS2008 / WM6 SDK (включает поддержку WM5)
-Symbol WM5 Устройство - MC70
-Windows Mobile Device Center
-Создан настольный MSI для установки CF2 CAB плюс CAB моего приложения через Custom DLL
-Во время установки (запущенной от имени администратора) CAB моего приложения успешно устанавливается, CAB CF2 говорит: «Установка не удалась»
-Как бы ни запускалось / отлаживалось приложение из 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 (от отступления) остальное такое же
4D 53 43 46 00 00 00 00 50 22 * ​​1029 * (из источника) остальное такое же

Когда я заменяю «68 48» CAB на «50 22» CAB и запускаю его вручную на устройстве, он прекрасно устанавливается. Итак, мой вопрос: почему источник кабины слегка изменяется, когда он достигает устройства destination ? Кроме этого, файлы идентичны.

Другие вещи, которые я пробовал:
С нуля создаем небольшое приложение, ориентированное на WM5 / CF2. Добавление проекта CAB, добавление проекта установки и развертывания. Запустите программу установки из XP, отлично! Запустите программу установки из Win7, BOOM!

/ Корень устройства не содержит журнала установки CF2. Не заходит так далеко.
VOLATILE / Setup.log не содержит "ошибки".

Я также попробовал подход UberCab (объединение нескольких CAB в один CAB). Однако при разделении на устройстве: BOOM завершится неудачно. Это как-то знает.

Я нахожусь в конце моего остроумия. Часть CF2 должна просто работать.

-Tom

1 Ответ

0 голосов
/ 11 мая 2011

Оглядываясь назад на мой исходный код для SDK установщика CAB, я вижу, что начало CAB - это заголовок фиксированного размера.Первый DWORD - это подпись CAB (0x4643534d little-endian), как вы видите.Второй DWORD - это зарезервированный набор, который в вашем случае - все нули.Следующий DWORD - это размер CAB - вы показываете только нижнее слово, но разница составляет почти 10k (0x4868 - 0x2250 = 0x2618).Это может привести к сбою декомпрессора CAB, поскольку он ищет данные за концом файла.

Сейчас почему что меняется, я не знаю.Вы проверили источник для CAB в MSI?Вы открыли MSI в другом инструменте и вытащили CAB-файл, чтобы убедиться, что он там?В основном, CAB неверен на стороне источника (скорее всего, я так думаю) или он изменяется при перемещении?

...