Понимание UAC на Windows Vista / 7 - PullRequest
2 голосов
/ 28 ноября 2009

Я не очень понимаю Windows UAC ...

Мне нужно, чтобы моя программа могла обновлять и добавлять файлы в определенный каталог, принадлежащий программе. Этот каталог может быть подкаталогом приложения в Program Files, например, c: \ Program Files \ MyApp \ Data, или он может быть установлен в другом месте.

Я считаю, что, если она находится в папке Program Files, моей программе будет запрещено писать туда, если она не запущена с правами администратора и не имеет повышенных прав доступа. Это правильно?

Мне нужно иметь возможность обновлять файлы в этом каталоге, предпочтительно без вызова повышенных привилегий, а главное приложение все еще «защищено», просто разрешить доступ к этому одному каталогу. Я не могу переместить папку «Данные» в другое место, так как это стороннее приложение, с которым мне нужно взаимодействовать.

Как определяется, что UAC необходим для папок в программных файлах? Является ли Program Files специальным или просто разрешением? Если бы я настроил разрешения для этого подкаталога Data таким образом, чтобы учетная запись пользователя, на котором запущена программа, имела права на запись, позволила бы моему приложению обновлять файлы в этом каталоге без специальных привилегий?

Или есть лучший способ добиться этого, о котором я не думаю? Моя программа обновления должна быть в Java, поэтому получение повышенных привилегий - это боль. Я предполагаю, что мне нужно написать оболочку C ++ для запуска виртуальной машины Java, чтобы я мог дать этой оболочке соответствующий манифест. Не невозможно, но я не хочу этого делать.

Ответы [ 2 ]

2 голосов
/ 28 ноября 2009

Попробуйте изменить параметры безопасности каталога вашего приложения при установке, чтобы разрешить «Аутентифицированным пользователям» права на запись.

1 голос
/ 28 ноября 2009

Обычно, когда вам нужны как защищенные, так и незащищенные режимы UAC, вы делаете следующее.

  1. Создание двух исполняемых файлов (один должен быть основным и не требовать привилегий для какой-либо операции, второй должен иметь возможность выполнять операции привилегий).
  2. Запустить первый (основной) с ограниченными правами.
  3. Когда вам нужно выполнить привилегированную операцию, создайте новый процесс с правами администратора (откроет окно UAC) и запустите в нем второе приложение.
  4. Когда закончите со вторым приложением, закройте его, и вы вернетесь в ограниченный режим.

Так работает VMWare Workstation при изменении глобальных настроек.

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

...