以管理员身份安装但作为当前用户运行

时间:2015-08-21 20:38:32

标签: c# scheduled-tasks nsis uac

我的安装程序以管理员身份运行,但完成后我希望exe以当前用户身份运行。

我正在使用nsis并且已经尝试过UAC

ViewModel

但仍以管理员身份运行。

尝试使用任务计划程序

!insertmacro UAC_AsUser_ExecShell "" "some.exe" "" "" ""

但该任务也转到管理员,我无法将其交给当前用户。

任何想法?

1 个答案:

答案 0 :(得分:1)

我个人建议您只需删除在安装程序结束时运行应用程序的选项。用户可以从开始菜单启动它,它应该突出显示为新的和所有内容。

正如您可能知道的那样,UAC确实改变了应用程序作为不同用户运行的常见程度,而不是"登录"用户。您只需处理UAC存在的事实,并确定您是否觉得值得花费大量时间来解决它以及可能出现的错误和问题。

至少有4种方式可以作为"当前用户"运行某些东西,所有这些方法都有问题,可能会失败或最终以"错误"非管理员用户:

  • 使用(希望)非提升父级的令牌,这是NSIS UAC插件的功能。
  • 使用Windows任务计划程序。这是Vista早期推荐的做法,但我相信微软已经放弃了这种方法。
  • 在托管任务栏的资源管理器进程中使用shell COM对象为您调用ShellExecute。 StdUtils plugin提供了执行此操作的ExecShellAsUser方法。
  • 使用Windows NT服务。因为它以SYSTEM身份运行,所以它可以在任何会话中获取用户的令牌句柄。

如果您决定仍想尝试这样做,那么在选择方法之前,您需要决定当前用户的定义。

是否是登录欢迎屏幕的用户?用户是Explorer shell(任务栏等)正在运行吗?它是您的设置过程的父进程吗?您还应该记住runas.exe存在,并且用户可能因某种原因尝试以特定用户身份运行...