我在安装完成后以这种方式启动我的Windows应用程序:
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchApplication"
...
Function LaunchApplication
ExecShell "" "$INSTDIR\Application.exe"
FunctionEnd
但这有一个奇怪的,不希望的副作用。显然是我的应用程序启动了管理员权限。
我无法在Web浏览器(使用Firefox和IE测试)和我的应用程序之间拖放任何数据。
如果我退出我的应用程序(会话从NSIS启动),并从开始菜单图标重新启动它一切正常! - 我可以毫无问题地拖放到浏览器。
所以我怀疑因为在安装开始时有一个UAC请求,不知何故UAC权限被转移到我在安装后启动的进程。由于浏览器在低安全性过程中运行,因此Windows拒绝使用它们(在使用NSIS启动的流程实例中)排除任何数据。
如何从NSIS启动exe,以便不会发生此UAC /安全问题?
使用Exec '"$WINDIR\explorer.exe" "$TEMP\MyUnElevatedProcess.exe"'
取自http://mdb-blog.blogspot.com/2013/01/nsis-lunch-program-as-user-from-uac.html
我推荐使用Anders提到的插件ShellExecAsUser。我将它用于这个完全相同的目的:
!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApplication
...
Function LaunchApplication
SetOutPath $INSTDIR
ShellExecAsUser::ShellExecAsUser "" "$INSTDIR\Application.exe" ""
FunctionEnd
请注意使用SetOutPath确保Application.exe以安装文件夹作为当前目录启动。 ShellExecAsUser不设置此项。
UAC plugin可以用来解决这个问题,但它有点难以使用。你也可以尝试ShellExecAsUser,但我建议你不要使用run复选框...
试试这个:
!define MUI_FINISHPAGE_RUN "$INSTDIR\Application.exe"
!insertmacro MUI_PAGE_FINISH
要么
Function .oninstsuccess
Exec "$INSTDIR\Application.exe"
FunctionEnd