Как обновить EXE от удаленного хоста - C # 4.0 - WPF приложение
-
29-10-2019 - |
Вопрос
Я хочу обновить свой exe с удаленного сервера.Поэтому, когда кнопка нажала на моем приложении WPF, он загрузит пульт дистанционного управления, а также удаленный файл TXT и замените текущие в той же папке, которая EXE работает.Так что он перезаписывает текущий файл TXT и EXE, а мой EXE работает.Как я могу добиться этого?
Удаленный хост является URL, как www.mydomain.com/MyAPP.exe
Приложение WPF, C # 4.0
Решение
Способ, которым мы решили эту проблему, заключался в создании исполняемой оболочки, которая была установлена и развернута изначально на клиентских машинах.
«Настоящая» исполняемая программа хранится в подкаталоге этого исходного приложения.Когда приложение оболочки запускается, после того, как оно загрузило и установило все обновления для реального приложения, оно запускает исполняемый файл реального приложения в отдельном домене приложения.
Вот ядро «настоящего» приложения, запускаемого из оболочки:
родовое слово Обратите внимание, что в нашей версии приложение оболочки собирает имя пользователя и пароль от пользователя для правильного доступа к веб-сайту обновления.Затем эти данные передаются в «настоящее» приложение с помощью метода SetData
в домене приложения.
Другие советы
Решение зависит от вашего конкретного случая. Но нет прямого решения, потому что вы не можете обновлять сборки, пока они загружаются в память и используются. Я могу предложить 2 решения: с использованием Теневое копирование и используя какой-то помощник исполняемый. Я использовал оба из них.
<Сильные> теневые копия.
Очевидный способ - сделать ваш основной исполняемый файл, чтобы его копировали тень, заменить его, пока ваше приложение запущено, а затем перезагрузите приложение. Но вы
p.s. лично я предпочитаю прежнее решение, потому что он включает в себя какую-то волшебство Voodoo, используя домены приложений, отражение, сборки E.T.C. И это может быть превращено в использование плагинов, если вам нужно (например, через MEF Framework ). Но последнее проще понять, особенно если вы никогда не работали с доменами приложений и ручной сборки, это довольно просто.
Возможно, вы можете использовать clickOnce (на основе вашего комментария вышеВы будете готовы иметь другую сборку получить EXE .... Как упомянул другой плакат, вы не можете заменить бегущую сборку).Вы можете настроить его, чтобы проверить в разное время (например, на Startup) для новых версий, и он автоматически загружает их.Это очень надежное решение, и вы можете многое сделать с монтажами развертывания.