Предисловие
Это очередная статья из цикла о том, как я работаю с устаревшими устройствами, добавляя им больше возможностей и упрощая взаимодействие. Однако в этот раз я не стал брать чужие разработки и заставлять их работать, а написал своё собственное приложение, поскольку аналогов для него просто нет.
Меня всегда волновало удобство установки программ на старые устройства. Я уже давно держу свой FTP сервер для этих целей, а клиенты есть практически подо все операционные системы, но это всё равно не слишком удобно, особенно для людей, не сталкивавшихся раньше с FTP. Поэтому около года назад мне пришла в голову мысль сделать что-то вроде магазина приложений, но у меня всё как-то не было времени и желания и достаточных знаний, возможно. И на самом деле проект включает в себя не только WinMobile, но кучу разных мобильных и десктопных систем, таких как Symbian, Mac OS (classic), старые версии Windows, DOS, Palm... словом все, к которым у меня есть доступ для отладки и которые можно вывести в сеть. Почему же я начал именно с WM? Всё очень просто. Так вышло, что моим любимым языком программирования является C#, а на WM есть свой собственный .Net, который, хоть и с большим числом ограничений, позволяет писать приложения.
Так же стоит сразу сказать, что хоть уже сейчас приложение запускается, работает и выполняет свои функции, проект ещё очень сырой, но я регулярно им занимаюсь, дописываю новые функции и исправляю ошибки, поэтому рад любым предложениям, советам и просто сообщениям об ошибках. В конце я оставлю ссылку на гитхаб.
Как вообще сейчас писать под Windows Mobile?
Способов на самом деле много, но в любом случае понадобится Windows Mobile SDK. Я использую версию для WM 5.0, но она позволяет собирать приложения и для WM2003 и для WM6. В качестве IDE я использую Visual Studio 2008, но видел мануалы по подключению SDK к студиям вплоть до 2017. С VS2008 этот SDK работает из коробки, поэтому я просто создал виртуальную машину с Windows 7 (потому что на Windows 10 такая старая студия уже не устанавливается), поставил студию и всё заработало.
![Окно проекта VS2008 Окно проекта VS2008](https://habrastorage.org/getpro/habr/upload_files/62c/9b0/991/62c9b0991fe266bcf7f234206a85068d.png)
Писать можно как на Visual C++, так и на C# с .Net Compact Framework 3.5. Для КПК существует отдельный Smart Device Project. Отладка производится либо на встроенном в SDK эмуляторе, либо на подключенном через ActiveSync физическом устройстве.
![Эмулятор с WM2003 Эмулятор с WM2003](https://habrastorage.org/getpro/habr/upload_files/7cc/dde/5e3/7ccdde5e3117cf13413b4ec5ecb8e3ba.png)
![Но я предпочитаю использовать HTC Cruise Но я предпочитаю использовать HTC Cruise](https://habrastorage.org/getpro/habr/upload_files/b0e/afb/fd2/b0eafbfd246e4a9a7967f7a5d49132db.png)
Обзор возможностей клиента
Дизайн приложения довольно простой и не содержит дизайнерских изысков, но, как мне кажется, хорошо вливается в интерфейс остальной системы и выглядит лаконично. После загрузки менеджера выводится список доступных для установки приложений. Для выбора любого из них достаточно кликнуть по его названию.
![Список приложений на сервере Список приложений на сервере](https://habrastorage.org/getpro/habr/upload_files/220/d70/4c5/220d704c5d4f9ea88f28a596472aca58.png)
Страница приложения содержит некоторое количество информации о нём и позволяет загрузить и установить программу.
![Страница приложения Страница приложения](https://habrastorage.org/getpro/habr/upload_files/82d/7a8/3e7/82d7a83e74114a1a1ae2d37bfa2a3a05.png)
На вкладке "Установленные" находится список уже загруженных на устройство приложений. Здесь же можно удалить их или узнать некоторые свойства, такие как место установки, дата установки и т.д.
![Список установленных приложений Список установленных приложений](https://habrastorage.org/getpro/habr/upload_files/9bd/571/e94/9bd571e94dffc9edd559584af40c9204.png)
Для доступа к настройкам приложения требуется выбрать меню "Действия" -> "Параметры". Выбор вкладки "Обновить" того же меню приведет к загрузке списков доступных и установленных программ заново.
![Параметры менеджера Параметры менеджера](https://habrastorage.org/getpro/habr/upload_files/5e3/f53/a1b/5e3f53a1bf01834462e946273f257e2e.png)
С помощью меню "Справка" можно узнать информацию о приложении, авторе и получить помощь в работе.
![О Программе О Программе](https://habrastorage.org/getpro/habr/upload_files/097/aa6/77d/097aa677d452a64ef0d39ee147f33c4c.png)
Немного о внутреннем устройстве
Как я уже говорил выше, я уже давно использую FTP-сервер с хранилищем приложений для разных устройств, поэтому он же и лёг в основу всей системы. Причем мне нужно по сути всего 3 команды: листинг, скачивание файла и считывание размера файла. В Net CF почему-то нет поддержки FTP, так что мне пришлось искать стороннюю библиотеку. Сначала я использовал OpenNetCF.Net.FTP, но потом просто взял оттуда нужные функции. Я всё равно к этому времени уже переписал часть библиотеки для своего удобства, поэтому "ванильную" версию всё равно использовать было бы нельзя.
Так как все файлы на сервере лежат в виде zip-архивов, мне понадобилась библиотека распаковщика. В качестве оной я взял ICSharpCode.SharpZipLib. К сожалению та версия, что сейчас лежит на гитхабе уже давно не поддерживает WinMobile, но я нашел старую DLL-библиотеку, собранную ещё в 2008 году и она заработала без проблем.
Далее - установка. Я использую вызов стандартной утилиты wceload для установки Cab-файлов. Сейчас она запускается со своим интерфейсом, но в будущем я хочу сделать установку тихой, не прерывая работу менеджера. Если же программа представляет из себя одиночный exe или папку, то я копирую её в установочную директорию и "руками" создаю ярлык и инсталляционные записи в реестре.
И наконец список установленных приложений вместе со свойствами просто считывается из реестра из ключа HKLM\Software\Apps.
Кроме этого мне пришлось написать свой собственный диалог выбора папки, окно "О Программе" и некоторые методы (например, определение свободного места в памяти), потому что их тоже нет среди стандартных функций Net CF.
Итог
Я написал эту статью по большей части для того, чтобы оценить интерес людей к подобному проекту. Ну и привлечь к нему внимание, конечно. Учитывая, что это, по сути, только начало пути, я думаю, будут ещё статьи о работе над менеджером и сопутствующих вещах.
Этот проект, как и другие мои поделия можно найти на моём гитхабе.
Пожалуй и всё, что мне хотелось сказать сегодня.
sebasww
Лампово. Спасибо.