【发布时间】:2013-05-09 11:14:55
【问题描述】:
我在安装完成后以这种方式启动我的 Windows 应用程序:
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchApplication"
...
Function LaunchApplication
ExecShell "" "$INSTDIR\Application.exe"
FunctionEnd
但这有一个奇怪且不受欢迎的副作用。显然我的应用程序是以管理员权限启动的。
我无法在网络浏览器(使用 Firefox 和 IE 测试)和我的应用程序之间拖放任何数据。
如果我退出我的应用程序(会话从 NSIS 开始),然后从开始菜单图标重新启动它,一切正常! - 我可以毫无问题地拖放到浏览器。
所以我怀疑,由于在安装开始时有一个 UAC 请求,因此 UAC 权限以某种方式转移到了我在安装后启动的进程。由于浏览器在低安全性进程中运行,Windows 拒绝与它们交换任何数据(在使用 NSIS 启动的进程实例中)。
如何从 NSIS 启动一个 exe,这样 UAC/安全问题就不会发生?
【问题讨论】:
-
您正确地注意到提升的进程将自动启动其他提升的进程。自从在 Vista 中引入 UAC 以来,这种行为就已经存在(并且惹恼了用户)。除非设置了某些注册表项,否则系统会阻止非提升和提升应用之间的数据传输。
-
我建议修改问题的标题以澄清问题。沿途的东西:
"How to launch an executable on the end of installation with proper rights?