Вопросы безопасности, контроля версий и манифестов в развертываниях ClickOnce

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

ClickOnce и Управление учетными записями пользователей Windows

В Windows Vista и более поздних версиях Windows приложения по умолчанию выполняются как стандартный пользователь, даже если текущий пользователь входит в систему с учетной записью с разрешениями администратора. Если приложение должно выполнить действие, требующее разрешений администратора, оно сообщает операционной системе, которая затем предложит пользователю ввести учетные данные администратора. Эта функция, которая называется элементом управления учетными записями пользователей (UAC), запрещает приложениям вносить изменения, которые могут повлиять на всю операционную систему без явного утверждения пользователя. Приложения Windows объявляют, что для них требуется повышение прав разрешений, указав requestedExecutionLevel атрибут в trustInfo разделе манифеста приложения.

Из-за риска предоставления приложений атак с повышением прав безопасности приложения ClickOnce не могут запрашивать повышение разрешений, если для клиента включенА UAC. Любое приложение ClickOnce, которое пытается задать атрибут или highestAvailable не установит его requestedExecutionLevelrequireAdministrator в Windows Vista и более поздних версиях.

В некоторых случаях приложение ClickOnce может попытаться запустить с разрешениями администратора из-за логики обнаружения установщика в Windows. В этом случае атрибут в манифесте приложения можно задать requestedExecutionLevel для asInvoker. Это приведет к тому, что само приложение будет работать без повышения прав. Visual Studio автоматически добавляет этот атрибут ко всем манифестам приложения.

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

Квоты веб-приложений и приложения с частичным доверием

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

Дополнительные сведения и инструкции по изменению квоты веб-приложения см. в обзоре кэша ClickOnce.

Вопросы управления версиями

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

Например, предположим, что у вас есть сборка с строгим именем в своем проекте с версией 1.0.0.0.0. После компиляции сборки добавьте его в качестве ссылки на проект, содержащий основное приложение. Если вы обновляете сборку, увеличьте версию до версии 1.0.0.1 и попытаетесь развернуть ее без повторной компиляции приложения, приложение не сможет загрузить сборку во время выполнения.

Эта ошибка может возникать только в том случае, если вы редактируете манифесты ClickOnce вручную; Эта ошибка не возникает, если вы создаете развертывание с помощью Visual Studio.

Указание отдельных сборок платформа .NET Framework в манифесте

Приложение не сможет загрузиться, если вы вручную отредактировали развертывание ClickOnce, чтобы ссылаться на старую версию сборки платформа .NET Framework. Например, если вы добавили ссылку на сборку System.Net для версии платформа .NET Framework до версии, указанной в манифесте, возникнет ошибка. Как правило, не следует пытаться указывать ссылки на отдельные сборки платформа .NET Framework, так как версия платформа .NET Framework, для которой выполняется приложение, указывается в качестве зависимостей в манифесте приложения.

Проблемы синтаксического анализа манифеста

Файлы манифеста, используемые ClickOnce, являются XML-файлами, и они должны быть хорошо сформированы и допустимы: они должны соответствовать правилам синтаксиса XML и использовать только элементы и атрибуты, определенные в соответствующей схеме XML.

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

Если вы вручную редактировали манифесты развертывания или приложения, возможно, их непреднамеренно повреждены. Поврежденный манифест предотвратит правильную установку ClickOnce. Такие ошибки можно отлаживать во время выполнения, щелкнув диалоговое окно "Сведенияоб ошибке ClickOnce" и прочитав сообщение об ошибке в журнале. В журнале будет перечислены одно из следующих сообщений:

  • Описание синтаксической ошибки, а также номер строки и положение символов, в которых произошла ошибка.

  • Имя элемента или атрибута, используемого в нарушении схемы манифеста. Если вы добавили XML вручную в манифесты, вам придется сравнить дополнения с схемами манифеста. Дополнительные сведения см. в разделе "Манифест развертывания ClickOnce" и манифест приложения ClickOnce.

  • Конфликт идентификатора. Ссылки на зависимости в манифестах развертывания и приложения должны быть уникальными как в их name , так и publicKeyToken в атрибутах. Если оба атрибута совпадают между двумя элементами манифеста, анализ манифеста не будет выполнен.

Меры предосторожности при изменении манифестов или приложений вручную

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

Меры предосторожности с использованием поставщика развертывания

Манифест развертывания ClickOnce имеет deploymentProvider свойство, указывающее полный путь к расположению, из которого должно быть установлено и обслуживаться приложение:

<deploymentProvider codebase="http://myserver/myapp.application" />

Этот путь устанавливается, когда ClickOnce создает приложение и является обязательным для установленных приложений. Путь указывает на стандартное расположение, в котором установщик ClickOnce установит приложение из и ищет обновления. Если вы используете команду xcopy для копирования приложения ClickOnce в другое расположение, но не изменяйте deploymentProvider свойство, ClickOnce по-прежнему будет ссылаться на исходное расположение при попытке скачать приложение.

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

Примечание.

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

Устранение неполадок с развертываниямиClickOnce Secure ClickOnce для выбора стратегии развертывания ClickOnce