Я хочу, чтобы мое приложение запускалось как администратор в Windows 8.1, поэтому я использую NSIS для его настройки, добавив следующее значение в реестр Windows:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\MBM\\testo.exe"="~ RUNASADMIN"
Проблема в том, что NSIS не пишет это значение в реестре Windows, хотя оно может писать другие!
NSIS отлично работает как администратор с помощью
RequestExecutionLevel admin
Я использую следующий фрагмент NSIS для записи в реестре Windows (1-й строка и 2-й рабочий тон, а третий - нет)
WriteRegStr HKLM "SOFTWARE\${ORGANIZATION}\${APPNAME}" ClientVersion "${VERSION}"
WriteRegStr HKLM "SOFTWARE\${ORGANIZATION}\${APPNAME}" ClientPath "$INSTDIR"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" $INSTDIR\${APPNAME}.exe "~ RUNASADMIN"
На самом деле вы не должны писать ключ AppCompatFlags. Ваше приложение должно обнаружить, что оно не повышено, а затем уведомлять пользователя или пытаться перезагрузить себя.
Если это 64-битная система, тогда будут два ключа AppCompatFlags (другой в Software \ Wow6432Node ), и вы можете использовать инструкцию SetRegView
NSIS, чтобы выбрать, к какому ключу вы хотите записать.