Настройка параметров UAC для файла в C#
Я хочу дать файлу (уже присутствует на клиентском компьютере.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 не может выполнять административные операции.
на самом деле я уже развернул приложение на более чем 10000 клиентов, поэтому хочу выпустить патч для решения проблемы с правами администратора.
3 ответа
Создайте файл манифеста (см. http://www.gregcons.com/KateBlog/AddingAManifestToAVistaApplication.aspx среди других мест) и назовите его Whever.exe.manifest и поместите в ту же папку, что и исполняемый файл. Nanifest должен установить требуемый уровень_выпуска в значение requireAdministrator. Все готово.
Если у вас есть другой exe-файл, вы можете встроить манифест при его создании. Это почти тривиально в Visual Studio 2008 и выше. См. Вкладку "Приложение" и раскрывающийся список "Манифесты". Есть инструкции рядом. Кроме того, когда вы используете VS 2008 для добавления манифеста в ваш проект, вам не нужно вводить весь XML, вы просто копируете соответствующий запрошенный уровень выполнения из комментариев, сгенерированных для вас.
Выполнять с правами администратора не является разрешением файла.
Обычно это настраивается путем добавления файла манифеста (либо к ресурсам Win32 в EXE, либо в качестве внешнего манифеста). Этот файл манифеста может указывать, должно ли приложение работать с повышенными правами или нет.
Я не совсем уверен, где Windows хранит параметр совместимости "Запускать эту программу от имени администратора".
Использование файла манифеста является наилучшим подходом, но альтернативным вариантом будет программно установить флаг "Запускать эту программу от имени администратора" (параметр, который вы найдете на вкладке "Совместимость" свойств EXE-файла), установив простой ключ реестра. Вам необходимо создать строковое значение (REG_SZ) под одним из этих ключей (если вы хотите, чтобы настройка была для пользователя или для компьютера, соответственно):
HKEY_CURRENT_USER \ Программное обеспечение \Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
или же
HKEY_LOCAL_MACHINE\ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
Имя значения должно быть полным путем к вашему исполняемому файлу (если путь содержит пробелы, не заключайте путь в кавычки), а данные значения должны содержать строку RUNASADMIN
,