настройка параметров UAC для файла в C # - PullRequest
1 голос
/ 29 апреля 2010

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

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

пожалуйста, дайте мне знать, как это сделать я использую этот код

        System.Security.AccessControl.FileSecurity fs = File.GetAccessControl(@"c:\inam.exe");
        FileSystemAccessRule fsar = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow);
        fs.AddAccessRule(fsar);
        File.SetAccessControl(@"c:\inam.exe", fs);

этот код правильно изменит разрешения, но все же, когда я выполняю inam.exe после выполнения этого кода, UAC не появляется, а также inam.exe не может выполнять административные операции.

На самом деле я уже развернул приложение на более чем 10 000 клиентов, поэтому хочу выпустить патч для решения проблемы с правами администратора.

Ответы [ 3 ]

3 голосов
/ 29 апреля 2010

Лучше всего использовать файл манифеста, но альтернативным вариантом было бы программно установить флаг «Запускать эту программу от имени администратора» (параметр, который вы найдете на вкладке «Совместимость» свойств EXE-файла), установив простой ключ реестра. Вам необходимо создать строковое значение (REG_SZ) под одним из этих ключей (если вы хотите, чтобы настройка была для пользователя или для компьютера, соответственно):

HKEY_CURRENT_USER \ Программное обеспечение \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers

или

HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers

Имя значения должно быть полным путем к вашему исполняемому файлу (если путь содержит пробелы, не окружайте путь кавычками), а данные значения должны содержать строку RUNASADMIN.

3 голосов
/ 29 апреля 2010

Выполнение с правами администратора не является разрешением файла.

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

Я не совсем уверен, где Windows хранит параметр совместимости «Запускать эту программу от имени администратора».

2 голосов
/ 29 апреля 2010

Создайте файл манифеста (см. http://www.gregcons.com/KateBlog/AddingAManifestToAVistaApplication.aspx среди других мест) и назовите его Whever.exe.manifest и поместите в ту же папку, что и исполняемый файл. Nanifest должен установить требуемый уровень_выпуска в значение requireAdministrator. Все готово.

Если у вас есть другой exe, вы можете встроить манифест, когда создаете его. Это почти тривиально в Visual Studio 2008 и выше. См. Вкладку «Приложение» и раскрывающийся список «Манифесты». Есть инструкции рядом. Также, когда вы используете VS 2008 для добавления манифеста в ваш проект, вам не нужно вводить весь XML, вы просто копируете соответствующий запрошенный уровень выполнения из сгенерированных для вас комментариев.

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