Как избежать UAC в перспективе? - PullRequest
3 голосов
/ 15 января 2009

я пишу приложение, которое загружает и устанавливает дополнения для программ, которым необходимо сохранять данные в программных файлах (для рассматриваемых программ). Теперь это нормально работает на XP и Vista с отключенным UAC, но не работает на нормальном Vista из-за виртуальных папок.

Как можно обойти это без необходимости запрашивать права администратора при каждом запуске приложения?

P.s. Программа написана на C ++, Vis 2005

Редактировать: Виртуальные папки файловой системы: http://www.codeproject.com/KB/vista-security/MakingAppsUACAware.aspx

Ответы [ 3 ]

9 голосов
/ 15 января 2009

Запись только в Program Files только во время установки. После этого пишите в пользовательские папки.

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

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

В этой статье рассказывается о том, как заставить приложения хорошо работать с UAC. Также см. Эту статью здесь.

1 голос
/ 15 января 2009

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

Ваше неадминистративное приложение может вызвать это приложение, которое вызовет UAC. Людям, которые понимают UAC, все равно, и они с радостью нажмут на ваше приложение. Те, кто ненавидят это, выключат это. Вызов для запуска нового процесса (который требовал прав администратора) вызовет исключение win32, если пользователь отменяет диалоговое окно UAC, так что будьте осторожны, чтобы его перехватить.

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

Другой вариант - создать все ваши «обновления» в виде обновлений MSI. Таким образом, установщик Windows будет запускать UAC для вас, и вы можете предоставить логотип для вашего программного обеспечения и т. Д.

Вариант 3 - использовать развертывание clickonce, которое позволит вам автоматически обновлять вашу программу без UAC, но вы живете в изолированной программной среде в системе пользователей, которая может не работать с текущим дизайном вашего приложения.

0 голосов
/ 01 февраля 2009

Я обошел Uac, создав службу Windows, которая выполняет ту работу, которая мне нужна, и запускается только во время работы приложения.

...