Как запустить исполняемый файл в конце установки с соответствующими правами?

Я запускаю свое приложение 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, но я бы порекомендовал вам вообще не использовать флажок запуска...

Другие вопросы по тегам