Установить / выполнить файл CAb [файл приложения Windows Mobile] из кода C #? - PullRequest
2 голосов
/ 22 декабря 2011

Я занимаюсь разработкой приложения для Windows Mobile для Framework 6. Я хочу добавить функциональность для обновления исправления с помощью приложения, работающего в данный момент на устройстве.

Пока приложение Windows Mobile работает, оно должно проверять асинхронно на наличиеновая версия доступна в базе данных сервера.Если патч существует, программа должна загрузить файл .cab (установщик Windows Mobile) и автоматически установить / запустить его.

В основном у меня есть сомнения по этому поводу:

  1. Какзагрузить файл cab в определенную папку устройства.
  2. Как установить файл cab программно.(Программно запустить установку файла cab без вмешательства пользователя)

Как это можно сделать?

Пожалуйста, помогите мне в этом .....

Ответы [ 3 ]

3 голосов
/ 22 декабря 2011

Загрузка файла в локальную папку обычно зависит от вашего репозитория, т.е. вам понадобится немного другой код, если вы храните его на общем ресурсе или, скажем, в веб. Вы должны рассмотреть возможность обеспечения проверки версии перед загрузкой через какой-либо файл манифеста или запись базы данных, чтобы избежать загрузки всего патча только для проверки его версии.

Как только вы загрузите отсортированную часть (опять же, зависит от хранилища), вы можете запустить установку CAB из своего приложения, позвонив по телефону wceload.exe:

            Process proc = Process.Start("wceload.exe", "\"" + Path.Combine(applicationPath, updateFileName) + "\"");
            proc.WaitForExit();

Однако пользователю потребуется взаимодействовать и нажать «ОК», чтобы установить новую версию поверх старой.

[Изменить] Некоторые производители устройств (например, Intermec) предоставляют способы автоматической установки CAB при перезагрузке, но это зависит от конкретного устройства, поэтому вам придется ознакомиться с этим.

1 голос
/ 06 ноября 2012

Мне просто нужно было сделать это, похоже, что на часть установки ответили.Если кому-то нужна часть загрузки, это сработало для меня.

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Timeout = 10000;
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream receiveStream = response.GetResponseStream();

        using (Stream file = File.OpenWrite("\\Windows\\Desktop\\file.cab"))
        {
            byte[] buffer = new byte[8 * 1024];
            int len;
            while ((len = receiveStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                file.Write(buffer, 0, len);
            }    
        }
1 голос
/ 17 марта 2012

Я решил это следующим образом:

  1. Открыть tcp / ip-подключение к настольному приложению.
  2. Отправить из приложения PDA номер текущей версии.
  3. Во времякомпиляция, добавьте в поле версии файла # .inf значение вручную (здесь я не смог найти решение сделать это автоматически во время компиляции).
  4. Настольное приложение ищет доступную версию в файле * .inf и отправляет ее обратно вПриложение PDA.
  5. Приложение PDA получает его и сравнивает с запущенной версией.
  6. Если версия на компьютере dektop выше, чем запущенная версия, приложение PDA отправляет запрос на доставку файла CAB на настольный компьютер (здесь можнобыть введено диалоговое окно для запроса cab-файла).
  7. Настольный компьютер отправляет CAB-файл в приложение PDA.
  8. Приложение PDA получает CAB-файл и сохраняет его локально.
  9. Затем запустите установку с помощьюwceload.exe с параметрами / удалить 1 / без вывода сообщений "полный путь к файлу cab"
  10. В случае успешной установки, выйдите из приложения или перезапустите КПК.
  11. Если в приложении для КПК установлено

Это не несколько строк кода, однако оно отлично работает.

...