Как запустить исполняемый файл в конце установки с соответствующими правами?
Я запускаю свое приложение Windows таким образом после завершения установки:
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchApplication"
...
Function LaunchApplication
ExecShell "" "$INSTDIR\Application.exe"
FunctionEnd
Но это имеет странный и нежелательный побочный эффект. Видимо, мое приложение запущено с правами администратора.
Я не могу перетащить какие-либо данные между веб-браузером (протестировано с Firefox и IE) и моим приложением.
Если я выйду из приложения (сеанс начался с NSIS) и перезапущу его из значка меню "Пуск", все будет работать! - Я могу без проблем перетащить в браузеры.
Поэтому я подозреваю, что в начале установки есть запрос UAC, так или иначе права UAC передаются процессу, который я запускаю после установки. Поскольку браузеры работают с низким уровнем безопасности, Windows отказывается обмениваться с ними какими-либо данными (в экземпляре процесса, который запускается с NSIS).
Как запустить exe из NSIS, чтобы эта проблема с UAC/ безопасностью не возникала?
4 ответа
Использование Exec '"$WINDIR\explorer.exe" "$TEMP\MyUnElevatedProcess.exe"'
Взято с http://mdb-blog.blogspot.com/2013/01/nsis-lunch-program-as-user-from-uac.html
Я рекомендую использовать плагин ShellExecAsUser, как упомянуто Андерсом. Я использую это для этой же цели, как это:
!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApplication
...
Function LaunchApplication
SetOutPath $INSTDIR
ShellExecAsUser::ShellExecAsUser "" "$INSTDIR\Application.exe" ""
FunctionEnd
Обратите внимание на использование SetOutPath, чтобы убедиться, что Application.exe запускается с установочной папки в качестве текущего каталога. ShellExecAsUser не устанавливает это.
Попробуй это:
!define MUI_FINISHPAGE_RUN "$INSTDIR\Application.exe"
!insertmacro MUI_PAGE_FINISH
ИЛИ ЖЕ
Function .oninstsuccess
Exec "$INSTDIR\Application.exe"
FunctionEnd
Плагин UAC можно использовать, чтобы обойти эту проблему, но его немного сложно использовать. Вы также можете попробовать ShellExecAsUser, но я бы порекомендовал вам вообще не использовать флажок запуска...