Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Windows CE/Mobile/Phone > Как сделать cab файл, который работает на мобильных устройствах?


Автор: Felan 18.01.12, 16:28
Суть в том, что есть некий cab файл, который делает студия (2008), для установки на устройстве. Все отлично работает. Cab ставится, и все запускается. Но.

Необходимо при скачивании этого cab файла с сервера изменить в нем содержание одного XML файла. Для этого пытаюсь использовать библиотеку Microsoft.Deployment.Compression.Cab. Аналогично тому, как описано тут например.

Т.е. сервер получает изначальный cab файл, распаковывает его, изменяет содержимое нужного файла, запаковывает распакованные файлы в cab обратно. Но этот новый cab не устанавливается на устройстве. И имеер меньший размер, чем оригинальный. Ну это ладно, допустим разная степерь сжатия. При установке на устройстве говорит "Installation of *.cab was unsuccessful". И все.

Пробовал смотреть в папке "Application data/Volatie", ничего там нет. Вообще ничего, пустая.
Пробовал запаковывать обратно тем же объектом, которым распаковывал (сначала делал разные).
Запаковываю папку, в которую распаковывается. По файлам пробовать не стал, потому как внутри все равно папка первращается в список файлов.

В чем может быть разница между тем cab файлом который делаю я и тем, который делает студия???

Код примерно такой:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
                var unpackDir = Unpack(sessionFilename);
     
                ProcessDefaultSettings(Path.Combine(unpackDir, "DefaultSettings.xml"));
     
                var c = new CabInfo(sessionFilename);
     
     
     
                c.Pack(unpackDir);
    //            var c2 = new CabInfo(Path.GetDirectoryName(sessionFilename) + "/NewCab.cab");
    //            c2.Pack(unpackDir);


SessionFile это пусть к оригинальному cab файлу.
Фнкция Unpack распаковывает его в unpackDir.
ProcessDefaultSettings изменяет нужный Xml. Правда это тестовый варинат, и файл насамом деле там не так называется, студия его обзывает по своему. Но это назнвания можно в _setup.xml найти, котоырй внутри cab находится. Вобщем это не важно.

Дальше я просто пробовал запаковывать тем же обхектом, который изначально связывается с оригинальным cab'ом.

В общем, кто может знает, в чем у них разница? Почему cab который делает VS, устанавливается, а мой нет? Разницы, кроме размера, я у них не нашел. Cab студией НЕ подписывается.

Автор: Nadz Goldman 18.01.12, 21:16
Ну как бы размер имеет значение.
Распакуй оба файла и сравни директории по содержимому - это ответ на твой вопрос.

Автор: Qraizer 19.01.12, 04:49
Мож цифровых подписей хочет?

Автор: Nadz Goldman 19.01.12, 05:33
Как правило нет там ничего.

А ты еще попробуй утилиткой CabInstaller поставить каб после сервера

Автор: Felan 19.01.12, 11:40
Цитата Nadz Goldman @
Распакуй оба файла и сравни директории по содержимому - это ответ на твой вопрос.

Абсолютно идентичны.


Цитата Qraizer @
Мож цифровых подписей хочет?

Нет подписей, ни там ни там. Если только студия в тихаря что-то где-то подписывает.


Цитата Nadz Goldman @
А ты еще попробуй утилиткой CabInstaller поставить каб после сервера

Поищу, что это попробую, как руки дойдут... К сожалению, пришлось делать обходной вариант. Но решение этого все равно хотелось бы...

Автор: Qraizer 19.01.12, 18:17
Цитата Felan @
Если только студия в тихаря что-то где-то подписывает.
Вот я об этом. Вполне может. По крайней мере, когда баловался CAB Manager-ом под Win98, там была фича подписывания CAB-а с обязательной проверкой перед инсталляцией.

Автор: Felan 20.01.12, 08:53
Вроде как студия создает cab при помощи утилитки:
c:\Program Files (x86)\Microsoft Visual Studio 9.0\smartdevices\sdk\sdktools\cabwiz.exe

Ничего похожего на подписывание там вроде нет.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)