如何正确启动安装结束的可执行文件?

我将在安装完成后以这种方式启动我的Windows应用程序:

!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchApplication" ... Function LaunchApplication ExecShell "" "$INSTDIR\Application.exe" FunctionEnd 

但是这有一个奇怪的和不希望的副作用。 显然是我的应用程序与pipe理员权限启动。

我不能在网页浏览器(用Firefox和IEtesting)和我的应用程序之间拖放任何数据。

如果我退出我的应用程序(会话从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插件可以用来解决这个问题,但是使用起来有点难。 你也可以尝试ShellExecAsUser,但我会建议你只是不使用运行复选框…

尝试这个:

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

要么

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