Mobile Compact Framework 2.0 Неудачная установка из Win7, созданной из VS2008
Недавно я обновил решение VS2005 для приложения WinMobile5 до VS2008. Решение также содержит проект CAB Builder и проект MSI Desktop Installer. Пользовательская библиотека DLL из установщика заботится о развертывании приложения и поддержке CAB, таких как Compact Framework 2.0, библиотеки сканеров и т. Д. На реальном устройстве.
Я использовал эту статью в качестве руководства для установки MSI:
http://msdn.microsoft.com/en-us/library/aa446504.aspx
Проблема в том, что CF2 CAB не может быть успешно установлен на устройство WM5 из Win7 при запуске файла Setup.exe / MSI. Однако установка из XP работает нормально.
Резюме:
-Windows7 32-битный компьютер - VS2008 / WM6 SDK (включает поддержку WM5)
-Symbol WM5 Устройство - MC70
-Windows Mobile Device Center
-Создан настольный MSI для установки CF2 CAB плюс CAB моего приложения через пользовательскую 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 (от Pullback) остальное такое же
4D 53 43 46 00 00 00 00 50 22 (от источника) остальное такое же
Когда я заменяю "68 48" CAB на "50 22" CAB и запускаю на устройстве вручную, он прекрасно устанавливается. Итак, мой вопрос: почему кабина источника слегка изменяется, когда она достигает устройства назначения? Кроме этого, файлы идентичны.
Другие вещи, которые я пробовал:
С нуля создаем небольшое приложение, ориентированное на WM5/CF2. Добавление проекта CAB, добавление проекта установки и развертывания. Запустите программу установки из XP, отлично! Запустите программу установки из Win7, BOOM!
/ Корень устройства не содержит журнала установки CF2. Не заходит так далеко.
VOLATILE / Setup.log не содержит "ошибки".
Я также попробовал подход UberCab (объединение нескольких CAB в один CAB). Тем не менее, при разделении на устройстве: BOOM не удается. Это как-то знает.
Я в конце своего остроумия. Часть CF2 должна просто работать.
-Том
1 ответ
Оглядываясь назад на мой исходный код для SDK установщика CAB, я вижу, что начало CAB - заголовок фиксированного размера. Первый DWORD - это подпись CAB (0x4643534d little-endian), как вы видите. Второй DWORD - это зарезервированный набор, который в вашем случае - все нули. Следующий DWORD - это размер CAB - вы показываете только нижнее слово, но разница составляет почти 10 КБ (0x4868 - 0x2250 = 0x2618). Это может привести к сбою декомпрессора CAB, потому что он ищет данные за концом файла.
Теперь, почему это меняется, я не знаю. Вы проверили источник для CAB в MSI? Вы открыли MSI в другом инструменте и вытащили CAB-файл, чтобы убедиться, что он там? По сути, CAB неверен на стороне источника (скорее всего, я так думаю), или он изменяется при перемещении?