如何在安装结束时以适当的权限启动可执行文件?

时间:2013-05-15 02:07:19

标签: windows winapi nsis

我在安装完成后以这种方式启动我的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 /安全问题?

4 个答案:

答案 0 :(得分:7)

我建议使用Anders提到的插件ShellExecAsUser。我将它用于这个完全相同的目的:

!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApplication

...

Function LaunchApplication
   SetOutPath $INSTDIR
   ShellExecAsUser::ShellExecAsUser "" "$INSTDIR\Application.exe" ""
FunctionEnd

请注意使用SetOutPath确保Application.exe以安装文件夹作为当前目录启动。 ShellExecAsUser没有设置它。

答案 1 :(得分:4)

使用Exec '"$WINDIR\explorer.exe" "$TEMP\MyUnElevatedProcess.exe"'

取自http://mdb-blog.blogspot.com/2013/01/nsis-lunch-program-as-user-from-uac.html

答案 2 :(得分:3)

UAC plugin可用于解决此问题,但有点难以使用。您也可以尝试ShellExecAsUser,但我建议您根本不使用“运行”复选框...

答案 3 :(得分:0)

试试这个:

!define MUI_FINISHPAGE_RUN "$INSTDIR\Application.exe"
!insertmacro MUI_PAGE_FINISH

OR

Function .oninstsuccess   
Exec "$INSTDIR\Application.exe"   
FunctionEnd