Использование ClickOnce и прокси-сервера
ClickOnce — технология Майкрософт для развёртывания приложений. Приложения ClickOnce могут проверять наличие новых версий по мере их доступности и автоматически заменять любые обновленные файлы, что очень удобно.
Бывает так, что для управления доступом пользователей к Интернету и ресурсам внешней сети используется прокси-сервер (с аутентификацией или без). ClickOnce предоставляет поддержку встроенной проверки подлинности прокси-сервера в Windows, начиная с версии .NET Framework 3.5, но не поддерживает другие протоколы проверки подлинности, такие как «Обычная проверка подлинности» или «Краткая проверка подлинности».
Если не используется проверка подлинности, мы можем настроить прокси с помощью элемента defaultProxy:
Но если компьютер настроен на использование прокси-сервера, требующего проверки подлинности, при попытке обновления мы получим следующую ошибку, даже если укажем свои Credentials:
Удаленный сервер возвратил ошибку: (407) требуется проверка подлинности прокси.
Это происходит потому, что каждый раз, когда загружается файл с помощью класса SystemNetDownloader, учетные данные сбрасываются на данные по умолчанию.
Решаем эту проблему следующим образом:
Создаем свой класс прокси: CustomUserProxy
public class CustomUserProxy : IWebProxy < private WebProxy _webProxy; public CustomUserProxy(Uri uri) < _webProxy = new WebProxy(uri); >public ICredentials Credentials < get < return _webProxy.Credentials; >set < >> public Uri GetProxy(Uri destination) < return _webProxy.GetProxy(destination); >public bool IsBypassed(Uri host) < return _webProxy.IsBypassed(host); >/// /// Альтернативный метод, который устанавливает Credentials /// /// Учетные данные для аутентификации public void SetCredentials(ICredentials credentials) < _webProxy.Credentials = credentials; >>
Используем свой прокси:
Uri uriProxy = new Uri("http://myproxy.ent:808"); CustomUserProxy customProxy = new CustomUserProxy(uriProxy); customProxy.SetCredentials(new NetworkCredential("Login", "Password")); WebRequest.DefaultWebProxy = customProxy;
Развертывание классического приложения Windows .NET с помощью ClickOnce
Область применения:Visual Studio Visual Studio
для Mac
Visual Studio Code
Начиная с Visual Studio 2019 версии 16.8, можно использовать средство публикации для публикации .NET Core 3.1, .NET 5 или более поздней версии, классических приложений Windows с помощью ClickOnce из Visual Studio.
Если вам нужно опубликовать классическое приложение Windows .NET Framework, см. статью о развертывании классического приложения с помощью ClickOnce (C# или Visual Basic).
Публикация с помощью ClickOnce
- В обозревателе решений щелкните проект правой кнопкой мыши и выберите пункт Опубликовать (или воспользуйтесь командой меню Сборка>Опубликовать).
- Если ранее вы настроили какие-либо профили публикации, появится панель Публикация. Выберите Создать.
- В мастере публикации выберите Папка.
- На странице Указанный целевой объект выберите ClickOnce.
- Введите путь или выберите Обзор, чтобы выбрать расположение публикации.
- На странице Расположение установки выберите место, куда пользователи будут устанавливать приложение.
- На странице Параметры можно указать параметры, необходимые для ClickOnce.
- Если выбрана установка из UNC-пути или с веб-сайта, на этой странице можно указать, будет ли приложение доступно в автономном режиме. Если этот параметр выбран, приложение будет указано в меню «Пуск» пользователей и будет автоматически обновляться при публикации новой версии. По умолчанию обновления доступны в папке установки. Другое расположение для обновлений можно указать с помощью ссылки «Параметры обновления». Если вы не хотите, чтобы приложение было доступно в автономном режиме, оно будет запускаться из папки установки.
- Если выбрана установка с компакт-диска, DVD-диска или USB-накопителя, на этой странице также можно указать, поддерживает ли приложение автоматические обновления. Если выбрана поддержка обновлений, требуется указать расположение обновления, которое должно быть допустимым UNC-путем или веб-сайтом.
С помощью ссылок в верхней части страницы можно указать, какие файлы приложений следует включить в программу установки, какие пакеты необходимых компонентов нужно установить, а также выбрать другие параметры. Кроме того, на этой странице можно задать версию публикации и будет ли она автоматически увеличиваться при каждой публикации.
Заметка Номер версии публикации уникален для каждого профиля ClickOnce. Если вы планируете иметь несколько профилей, необходимо помнить об этом.
- Развертывание, зависящее от платформы, и автономное развертывание
- Идентификаторы целевой среды выполнения (переносной RID и т. п.)
- Конфигурации отладки и выпуска
Далее
Для приложений .NET:
- ClickOnce для .NET в Windows
- Общие сведения о публикации приложений .NET
- Справочные сведения ClickOnce
Развертывание с помощью технологии ClickOnce для приложений Visual C++
Visual Studio предоставляет две различных технологии развертывания приложений Windows: ClickOnce и установщик Windows.
Развертывание с помощью технологии ClickOnce в C++
Среда разработки Visual C++ напрямую не поддерживает развертывание проектов Visual Studio C++ с помощью ClickOnce, но доступны инструменты для ее использования.
Visual Studio поддерживает ClickOnce в средах развертывания Visual C# и Visual Basic. Если проект Visual Studio C++ является зависимостью от проекта Visual C#, вы можете опубликовать приложение (включая его зависимости) с помощью развертывания ClickOnce из среды разработки Visual C#.
Для развертывания приложения Visual C++ с помощью ClickOnce сначала нужно создать Манифест приложения ClickOnce и Манифест развертывания ClickOnce с помощью Mage.exe (Инструмент создания и изменения манифестов) или его версий для графического пользовательского интерфейса (сведения см. в разделе MageUI.exe (средство создания и редактирования манифестов, графический клиент)).
Используя Mage.exe, создайте манифест приложения; полученный файл будет иметь расширение MANIFEST. Затем с помощью Mage.exe создайте манифест развертывания; полученный файл будет иметь расширение APPLICATION. Теперь необходимо подписать манифесты.
В манифесте приложения должен быть указан целевой процессор (x86, x64 или ARM). Сведения об этих вариантах см. в разделе Предварительные условия для развертывания 64-разрядных приложений.
Кроме этого, имена манифестов приложения и развертывания не должны совпадать с именем приложения С++. Это позволит избежать конфликта между манифестом приложения, созданным с помощью Mage.exe, и внешним манифестом, являющимся частью приложения C++.
При развертывании должны быть установлены все библиотеки Visual C++, от которых зависит работа приложения. Чтобы определить зависимости для конкретного приложения, можно воспользоваться файлом depends.exe или служебной программой DUMPBIN, запустив ее с параметром /DEPENDENTS. Дополнительные сведения о зависимостях см. в разделе Основные сведения о зависимостях приложения Visual C++. Может возникнуть потребность в выполнении VCRedist.exe; эта служебная программа устанавливает библиотеки Visual C++ на конечный компьютер.
Может также потребоваться создать начальный загрузчик (установщик необходимых компонентов) для приложения, чтобы развернуть необходимые компоненты. Подробнее о начальном загрузчике см. в разделе Создание пакетов загрузчика.
Подробные сведения об этой технологии представлены в разделе Развертывание и безопасность технологии ClickOnce. Подробный пример развертывания ClickOnce см. в разделе Пошаговое руководство. Развертывание вручную приложения ClickOnce.
При подготовке материала использовались источники:
https://habr.com/ru/articles/279879/
https://learn.microsoft.com/ru-ru/visualstudio/deployment/quickstart-deploy-using-clickonce-folder?view=vs-2022
https://learn.microsoft.com/ru-ru/cpp/windows/clickonce-deployment-for-visual-cpp-applications?view=msvc-170