Можем ли мы получить приглашение UAC показывать только один раз? - PullRequest
5 голосов
/ 07 января 2010

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

Другими словами, я понимаю, что нашему приложению необходимо разрешение UAC пользователя для выполнения определенных действий. И это нормально. Но мы не хотим, чтобы он постоянно спрашивал, когда это происходит. Может ли пользователь дать разрешение на наше приложение навсегда? Или то, что я прошу, нарушает основы UAC? ​​

Мы работаем с .NET и Windows 7

Ответы [ 7 ]

13 голосов
/ 07 января 2010

Ответ на ваш вопрос: Нет, вы не можете этого сделать.


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

Вам нужно, чтобы ваша программа не требовала административного доступа.

Задайте себе вопрос: Что вы делали в Windows XP?

  • мне не разрешено запускать ваше программное обеспечение?
  • Ваш софт рушится, когда я обычный пользователь?
  • Ваше программное обеспечение не имеет никакой ценности и не имеет абсолютно никакой функциональности при работе обычным пользователем?

Windows XP не убедила UAC. Единственный способ для пользователя запустить вашу программу от имени администратора - войти в систему с другим пользователем. И это гораздо хуже для пользователя, чем нажать «Продолжить».

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


Microsoft считает

  • белый-листы
  • Запомни мои предпочтения
  • Не спрашивайте меня снова.

Если бы у вас был белый список, то каждая программа просто добавляла бы себя в такой список во время установки.

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

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

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

Все эти идеи не решают проблему: почти ни одна программа не требует административного доступа .

Наконец настало время заставить разработчиков смириться с этим фактом.


Белый список не может работать

Некоторые люди хотят найти способы заставить работать белые списки.

  • Установите флажок, чтобы пользователь мог сказать: «Больше не запрашивать у меня этот файл»
    Если вы сохраните это имя файла, другие программы с таким же именем будут работать без прав администратора.

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

  • Что, если разрешены только подписанные приложения, тогда мы знаем, что они безопасны. Приложения не безопасны, потому что они подписаны. Приложение не должно быть вредоносным, чтобы его можно было использовать для совершения плохих действий. (например, переполнение буфера во flash, firefox, т.е. chrome, safari, opera, word, photoshop, инструмент загрузки изображений Yahoo).

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

  • Ну, тогда не разрешайте им доступ к списку. Даже администраторы не могут добавлять элементы в список. Если даже администраторы не могут добавлять элементы в список, то как пользователь может добавлять элементы в список? Вы не можете добавлять элементы в белый список, если вам не разрешено добавлять элементы в белый список!

А как вы управляете белым списком? Допустим, пользователь передумал, или папа передумал, или ИТ передумал, или корпорация передумала, или издатель программного обеспечения передумал: как вы удаляете элементы из списка - особенно когда никто разрешено изменять список.

Резюме: Белые списки не могут работать .

3 голосов
/ 08 января 2010

Единственный способ - установить себя в качестве службы или драйвера устройства.

3 голосов
/ 07 января 2010

Обновление: К сожалению, я изначально неправильно прочитал вопрос и интерпретировал его как "только один раз, при первом запуске", а не "только один раз, каждый раз, когда выполняется" (отредактировано соответственно ниже).

Вы не можете предоставлять права Администратора приложения на все время, что действительно противоречит дизайну UAC.

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

Служба будет запрашивать только один раз, когда она установлена.

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

Мой оригинальный ответ:

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

Вы можете настроить манифест для EXE через IDE в Visual Studio 2008/2010 или с помощью утилиты командной строки, которая поставляется с самым последним пакетом обновлений для VS 2005 (его можно интегрировать в шаг сборки для автоматизации). процесс, но немного выдумка в 2005 году).

Я хотел бы найти в Интернете «UAC» и «manifest» для получения дополнительной информации, она достаточно хорошо документирована в онлайновой документации MSDN (однажды узнав, что вы ее ищете).

Это одинаково работает в Windows 7 и Windows Vista.

1 голос
/ 07 января 2010
0 голосов
/ 25 марта 2010

Разработчикам нужен шлепок по затылку, не так ли?

Я создал 2 программы резервного копирования.

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

Могу ли я запустить это как службу в фоновом режиме? mabye? Вероятно, нет.

Это причина того, что все программное обеспечение AV, например, имеет службы в фоновом режиме. Таким образом, GUI - это всего лишь графический интерфейс, который ... он не имеет никакой функциональности, за исключением передачи команды / информации обратно службе, после чего команды и т. Д. Запускаются.

Будет ли работать белый список или нет, зависит от пользователей ... Я знаю пользователей, которые на самом деле просто нажимают «РАЗРЕШИТЬ» все время ... они даже не читают его. Так как же их защищает UAC, замечания вроде тупых и т. Д. Не помогают. Они делают это, потому что UAC запрашивает их каждый раз, когда они идут что-то делать.

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

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

0 голосов
/ 07 января 2010

Если это возможно (я не думаю, что он рассматривает, скажем, Как настроить Visual Studio, чтобы не выдавать подсказку UAC при каждом запуске? ), я почти уверен, что это должно быть сделано для пользователей сторона (например, отключение приглашения), а не сторона приложения.

0 голосов
/ 07 января 2010

Пользователь должен иметь возможность щелкнуть правой кнопкой мыши по исполняемому файлу и перейти в свойства -> Совместимость -> «Запустить эту программу от имени администратора»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...