Подводные камни / подводные камни развертывания ClickOnce / smart-клиента в .NET [закрыты]

StackOverflow https://stackoverflow.com/questions/149718

Вопрос

У меня есть несколько .NET Формы Windows приложения, которые я готовлюсь преобразовать в ClickOnce ( Щелчок )сценарий развертывания смарт-клиента.Я прочитал не самые лучшие руководства, но есть ли подводные камни или "подводные камни", о которых я должен знать?

Есть несколько второстепенных приложений, используемых время от времени, но основное приложение написано на C #, работает 24/7, довольно большое, но меняется только каждые несколько недель.Он также записывает данные в файл журнала локально и взаимодействует с локальными аппаратными устройствами.

Это было полезно?

Решение

Вот некоторые из них, о которых я знаю.

  1. Не удается разместить иконку на рабочем столе. Теперь ты можешь.

  2. Я не могу установить для всех пользователей.

  3. Мне нужно перепрыгнуть через обручи, чтобы перенести развертывание на другой сервер.Это не проблема, если вы разрабатываете внутри компании, и пользователи могут видеть сервер, на котором вы публикуете, или если вы выполняете развертывание в общедоступном Интернете, но это не очень хорошо, если вам нужно выполнять развертывание на нескольких сайтах клиентов независимо.

  4. С тех пор как .NET 3.5 SP1 вам больше не нужно подписывать манифест развертывания, что значительно упрощает перенос развертываний на новые серверы.

  5. Я не могу устанавливать сборки в GAC.Вы можете обойти это, создав обычные установочные пакеты, которые являются предварительными условиями приложения ClickOnce.

Другие советы

  • Когда обновления будут развернуты, встроенное диалоговое окно будет выглядеть так, как будто все приложение загружается повторно.Фактически, загружаются только измененные библиотеки DLL, и отображаемый индикатор выполнения вводит в заблуждение / неверен.Не тратьте время на попытки выяснить, почему все сборки развертываются повторно только для того, чтобы обнаружить, что на самом деле это не так.Не то чтобы я делал это или что-то в этом роде.
  • Когда срок действия сертификата, который вы использовали для подписи исходного манифеста развертывания, истечет и вам будет выдан новый, вас ждут большие неприятности (всем клиентам потребуется удалить и переустановить).Подробные сведения находятся у истоков.

Большинство проблем были устранены, но несколько человек упомянули о невозможности создать ярлык на рабочем столе.На самом деле, вы может создайте ярлык на рабочем столе с помощью Visual Studio 2008 SP1.

Кроме того, если вы не используете последнюю версию Visual Studio, вы всегда можете напишите код для создания ярлыка к установленному ярлыку меню "Пуск".

У нас было приложение, которое мы собирались развернуть как приложение ClickOnce.Нам нужно было, чтобы пользователь мог изменять некоторые настройки при установке (например, путь развертывания - он хочет обслуживать файлы из своего общего сетевого ресурса, неизвестного во время сборки).Когда вы изменяете любой из файлов в своем развертывании, вам необходимо заново вычислить все хэши и переподписать все.Итак, если это решение является внутренним, у вас может не возникнуть проблем с передачей сертификата подписи, но если это предназначено для клиентов, вам нужно будет разработать необычное решение, чтобы обойти эту проблему.

Я слышал слухи откуда-то из недр интернета, что будущая версия ClickOnce частично устранит эту головную боль.

Вы не можете автоматически удалять развернутые приложения ClickOnce.Также я думаю, что невозможно добавить параметры в ярлык запуска.

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

На случай, если кто-то укажет на это в поиске, мы обнаружили, что многие клиенты обеспокоены отсутствием безопасности, "распространяющей" их приложение.Приложение должно быть доступно в общедоступном месте - без какой-либо аутентификации, - чтобы оно могло проверять наличие обновлений.Единственное исключение - если у вас установлена проверка подлинности Windows NT.Я думаю , что Защита приложений ClickOnce объясняет, что я имею в виду.

Значки на рабочем столе довольно тривиально сделать с помощью кода, и, как уже упоминалось, с помощью 3.5 SP1, запеченный внутри - так что это больше не проблема.

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

Есть много вещей, которые вы не можете сделать с приложениями ClickOnce, например, установить ярлык на рабочий стол пользователя или указать, где устанавливается приложение.Для некоторых людей это нарушители правил.

Кроме того, прошло некоторое время с тех пор, как я им пользовался, но есть специальный способ, который вы можете использовать для определения и отображения номера версии / сборки ClickOnce, который отделен от номера версии / сборки приложения.Вы должны выполнить попытку / перехват, и если номер версии / сборки ClickOnce выдает исключение, значит, приложение запущено не как приложение, развернутое ClickOnce (то есть оно запущено как регулярно компилируемое приложение или из Visual Studio).

Для простого приложения (то есть не Microsoft Word, но скорее быстрое и грязное приложение, чтобы что-то делать) и нуждается в частом регулярном развертывании, ClickOnce великолепен.Но вы довольно быстро натыкаетесь на стену "о, это не может быть сделано с помощью ClickOnce, пожалуйста, выберите MSI или что-то еще).

У вас будет меньше доступа к системе, чем обычно.СЕТЕВОЕ приложение.

Это потому, что вы получите более низкий уровень доверия.Подробнее об этом в Руководство разработчика .NET Framework:Развертывание ClickOnce и безопасность.

Моя самая большая проблема заключалась в том, что невозможно зашифровать разделы вашего файла конфигурации машинным ключом, потому что у вас нет доступа к этому ключу (если подумать, то имеет смысл защитить этот ключ).

Я не знал, что пакет обновления 1 позволяет создавать значок на рабочем столе.
Вот как мы это делали (теперь известный как "трудный путь").:

try
{
    string company = string.Empty;
    string product = string.Empty;
    if (Attribute.IsDefined(asm, typeof(AssemblyCompanyAttribute)))
    {
        AssemblyCompanyAttribute asCompany = (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyCompanyAttribute));
        company = asCompany.Company;
    }
    if (Attribute.IsDefined(asm, typeof(AssemblyProductAttribute)))
    {
        AssemblyProductAttribute asProduct = (AssemblyProductAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyProductAttribute));
        product = asProduct.Product;
    }
    if (!string.IsNullOrEmpty(company) && !string.IsNullOrEmpty(product))
    {
        string desktopPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            product + ".appref-ms");
        string shortcutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs),
            Path.Combine(company, product + ".appref-ms"));
        File.Copy(shortcutPath, desktopPath, true);
    }
}
catch 
{
    // Shortcut could not be created
}

Вы не сможете установить, если клиент находится за прокси-сервером, который требует проверки подлинности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top