Поделиться через


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

Обновлен: Ноябрь 2007

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

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

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

Из-за риска сделать приложения уязвимыми к атакам, связанным с повышением уровня разрешений, приложения ClickOnce не могут запрашивать повышение уровня разрешений, если для клиента включена функция "Управление учетными записями пользователей". Любое приложение ClickOnce, которое пытается установить для атрибута requestedExecutionLevel значение requireAdministrator или highestAvailable, не будет установлено в Windows Vista.

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

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

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

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

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

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

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

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

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

Задание в манифесте отдельных сборок .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-адрес, используемый для запуска приложения.

ms228996.alert_note(ru-ru,VS.90).gifПримечание.

При каждом обновлении манифеста необходимо также подписать его заново.

См. также

Основные понятия

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

Развертывание и безопасность ClickOnce

Выбор стратегии развертывания ClickOnce

Обзор развертывания ClickOnce