installation - NSIS:安装应用程序以始终以管理员身份运行

标签 installation uac nsis

我有一个适用于大型应用程序的 NSIS 脚本。我在网上阅读了许多主题,但无法得到以下问题的明确答案:是否可以使用 NSIS 安装应用程序,该应用程序在启动时(无论用户类型如何)自动以管理员身份运行?如果这是可能的,如何实现?

注意:我已经强加 NSIS 包必须作为 admin 运行使用

RequestExecutionLevel admin

我曾尝试使用此 method 将 UAC 要求写入应用程序注册表项。但我找不到 RUNASADMIN命令编译,因为它不是 NSIS 所需的格式。

最佳答案

为了确保安装程序通常以管理员身份运行,我推荐这个小例子:

Outfile RequireAdmin.exe
RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on)

!include LogicLib.nsh

Function .onInit
UserInfo::GetAccountType
pop $0
${If} $0 != "admin" ;Require admin rights on NT4+
    MessageBox mb_iconstop "Administrator rights required!"
    SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
    Quit
${EndIf}
FunctionEnd

Page InstFile

Section
SectionEnd

如果已安装的应用程序始终需要以管理员身份运行,则它应该执行类似的步骤,对于 Win32 应用程序:
  • 添加 requestedExecutionLevel元素 to the manifestlevel属性设置为 requireAdministrator
  • 调用 IsUserAnAdminCheckTokenMembership以确保您确实是管理员。

  • 如果“以管理员身份自动运行”是指绕过 UAC 提升,那么这不可能,UAC 的全部意义在于允许用户确认/拒绝特权操作!一些应用程序通过安装代表应用程序执行它们所需的任何操作的 NT 服务来解决这个问题。我不推荐这样做,因为它让用户机器充满了服务,如果服务编码不正确,可能会削弱系统的安全性。

    如果您没有编写要安装的应用程序,那么您的选择就会受到更多限制。如果应用程序根本没有 list ,您可以使用 external ( myapp.exe.manifest )
    显现。

    在 AppCompatFlags 键下设置 RUNASADMIN 字符串并不是安装程序真正应该做的事情,这些兼容性选项应该由用户而不是应用程序控制。

    您链接的论坛主题也告诉您有关 two 的信息ways设置 SLDF_RUNAS_USER在快捷方式上标记,这不能确保应用程序在所有情况下都以管理员身份启动,仅当应用程序从快捷方式启动时,但如果您无法更改应用程序本身,这可能是您唯一的选择...

    关于installation - NSIS:安装应用程序以始终以管理员身份运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8821476/

    相关文章:

    nsis - 使用 NSIS 将当前日期和时间写为文件名

    nsis - 如何在运行时更改 NSIS 中的标题信息(文本)?

    php - Windows Server 2008 R2/IIS7.5 上缺少 IUSR 帐户

    windows - WiX Bootstrapper 在退出时运行可执行文件

    npm - 无法安装 WebPack CLI

    c# - 在 .NET 2.0 中将文件保存到 Vista/Windows 7 中的桌面

    nsis - 使用 NSIS 安装字体时出错

    windows - Windows、Linux、Mac 的安装目录

    c# - 如何使用 ServerManager 从类库中读取 IIS 站点,而不是 IIS Express,或者提升的进程如何处理类库?

    c# - 如何设计在 Windows Vista/7 上以管理员身份运行的自动启动应用程序?