【问题标题】:Run NSIS installer from a C++ application with out prompting UAC permission在不提示 UAC 权限的情况下从 C++ 应用程序运行 NSIS 安装程序
【发布时间】:2016-08-28 14:44:15
【问题描述】:

我有 C++ 应用程序作为服务运行。我想从该服务静默启动我的 NSIS 安装程序。是否可以?如果是,我该如何实现?

【问题讨论】:

  • 服务在哪个账号下运行?安装程序是否需要写入任何管理员级别的存储区域?您是否在 .nsi 中设置了 RequestExecutionLevel?
  • 运行的帐户是管理员。我有一些脚本可以更改注册表项。是的,我在 .nsi 文件中尝试了 RequestExecutionLevel,但没有帮助。
  • 您希望以谁的身份运行安装程序?与您的服务相同的用户(可能是 SYSTEM)还是恰好登录的普通用户帐户?
  • 我能否以与我的服务 (SYSTEM) 相同的用户身份启动安装程序并跳过 UAC 提示符?

标签: c++ nsis


【解决方案1】:

如果您想以与您的服务相同的用户身份启动安装程序,并且该服务以高完整性级别或系统运行,那么您可以使用CreateProcessShellExecute 启动安装程序。

如果你想以当前登录的用户身份启动安装程序,你需要使用CreateProcessAsUser,但如果你走这条路,事情会变得复杂。可能没有任何登录用户,或者可能有多个。一旦您确定了要启动该流程的用户,您就可以使用WTSQueryUserToken 获取他们的令牌。

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 2010-10-22
    • 2011-09-04
    • 2012-11-09
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    相关资源
    最近更新 更多