Есть ли способ избежать UAC для приложения автозапуска в Program Files? - PullRequest
4 голосов
/ 25 сентября 2011

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

Во время установки (используя InstallShield LE) изWindows UAC запрашивает у пользователя моего приложения разрешение на запуск в режиме администратора;Если пользователь принимает его - установка продолжается (стандартное поведение), и пользователь снова может проверить возможность добавить эту программу в список автозапуска (добавив ключ реестра в HKLM /../ Run).Все хорошо и нормально.Но после каждого перезапуска Windows, когда запускается это приложение, UAC запускается и запрашивает разрешение пользователя.Вопрос в том, как этого избежать, так как это немного раздражает (хотя моему приложению для запуска нужны привилегии администратора)?

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

Спасибо за любые советы, информацию, комментарии или решения.

Ответы [ 4 ]

4 голосов
/ 25 сентября 2011
  1. Должно ли ваше приложение действительно запускаться с повышенными правами?Или потребуется повышенный доступ позже, когда пользователь использует его для выполнения действия?Если вы можете, перенесите более позднюю задачу администратора в отдельный exe-файл, позволяя основному exe-файлу запускаться без повышения прав - при последующем запуске рабочего процесса это будет UAC по требованию.

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

1 голос
/ 25 сентября 2011

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

1 голос
/ 25 сентября 2011

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

0 голосов
/ 25 сентября 2011

Не сделано, но я нашел эту статью Выборочное отключение UAC для ваших доверенных приложений Vista , в котором говорится, что используется Application Compatibility Toolkit от Microsoft.

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

  • Запустите Compatibility Administrator от имени администратора
  • выберите новый шаблон базы данных
  • Нажмите кнопку Fix на панели инструментов. Когда вы увидите мастер создания нового исправления приложения ... введите сведения о вашем приложении
  • Выберите Compatibility Level
  • Выберите RunAsInvoker в качестве исправления

Кажется, что последний

Выбор опции RunAsInvoker позволит запустить приложение без запроса UAC.

Должен делать то, что вы хотите, при условии, что вызывающим является администратор, и я думаю, что вы можете сделать это при запуске с помощью планировщика: Создать ярлыки режима администратора без запросов UAC в Windows 7 или Vista

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

...