Чтобы убедиться, что установщик работает от имени администратора, обычно я рекомендую этот небольшой пример:
Outfile RequireAdmin.exe
RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on)
!include LogicLib.nsh
Function .onInit
UserInfo::GetAccountType
pop $0
${If} $0 != "admin" ;Require admin rights on NT4+
MessageBox mb_iconstop "Administrator rights required!"
SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
Quit
${EndIf}
FunctionEnd
Page InstFile
Section
SectionEnd
Установленное приложение должно выполнить аналогичные шаги, если его всегда нужно запускать от имени администратора, для приложения Win32, которое будет:
- Добавить элемент
requestedExecutionLevel
в манифест с атрибутом level
, установленным в requireAdministrator
- Позвоните IsUserAnAdmin или CheckTokenMembership , чтобы убедиться, что вы действительно являетесь администратором.
Если под «автоматически запускается от имени администратора» вы имеете в виду обойти повышение прав UAC, то нет, это на самом деле невозможно, весь смысл UAC состоит в том, чтобы позволить пользователю подтверждать / отклонять привилегированные операции! Некоторые приложения решают эту проблему, устанавливая службу NT, которая выполняет все необходимые действия от имени приложения. Я не рекомендовал бы это, потому что это заполняет пользовательскую машину службами и может ослабить безопасность системы, если служба не закодирована правильно.
Если вы не написали приложение, которое устанавливаете, тогда ваши возможности немного ограничены. Если приложение вообще не имеет манифеста, вы можете использовать external (myapp.exe.manifest
)
манифест.
Установка строки RUNASADMIN под ключом AppCompatFlags на самом деле не то, что должен делать установщик, предполагается, что этими параметрами совместимости должен управлять пользователь, а не приложения.
В ветке форума, на которую вы ссылаетесь, также рассказывается о двух способах установки флага SLDF_RUNAS_USER
на ярлыке, это не гарантирует, что приложение будет запущено от имени администратора в во всех ситуациях, только когда приложение запускается из ярлыка, но это может быть единственным вариантом, если вы не можете изменить само приложение ...