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

标签 windows winapi nsis

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

!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchApplication"

...

Function LaunchApplication
    ExecShell "" "$INSTDIR\Application.exe"
FunctionEnd

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

我无法在 Web 浏览器(使用 Firefox 和 IE 测试)和我的应用程序之间拖放任何数据。

如果我退出我的应用程序( session 从 NSIS 启动),然后从开始菜单图标重新启动它,一切正常! - 我可以毫无问题地拖放到浏览器。

所以我怀疑因为在安装开始时有一个 UAC 请求,所以 UAC 权限以某种方式转移到我在安装后启动的进程。由于浏览器在低安全进程中运行,Windows 拒绝与它们交换任何数据(在使用 NSIS 启动的进程实例中)。

如何从 NSIS 启动一个 exe,这样 UAC/安全问题就不会发生?

最佳答案

我推荐使用插件 ShellExecAsUser正如安德斯所提到的。我将它用于完全相同的目的,如下所示:

!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApplication

...

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

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

关于windows - 如何在安装结束时以适当的权限启动可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555625/

相关文章:

在没有管理员权限或无法访问命令行的情况下使用 MinGW 进行编译

c++ - 使用信号量的单 channel 桥同步

windows - 当 processHandle = -1 时,这个 OpenProcessToken 做了什么?

registry - NSIS 安装程序不写入注册表项

windows-7 - 如何将 NSIS 的 RequestExecutionLevel 选项添加到 CMakeLists.txt

windows - 启用存储空间时获取物理磁盘的信息

windows - 实现 x86 到 x64 汇编代码切换

C/C++ Allegro 程序导致 Windows 7 切换到 Aero Basic

winapi - 从驱动器号获取特定的设备类型

基于文件存在的 NSIS 脚本条件编译