首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSIS:安装应用程序以始终以管理员身份运行

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

Stack Overflow用户
提问于 2012-01-11 23:03:06
回答 2查看 17.6K关注 0票数 11

我有一个适用于大型应用程序的NSIS脚本。我在网上读了很多帖子,但对以下问题没有一个明确的答案:是否可以使用NSIS安装一个应用程序,该应用程序在启动时(无论是哪种类型的用户)会自动以管理员身份运行?如果这是可能的,那么如何实现呢?

注意:我已经强制要求NSIS包必须以admin身份运行,使用

代码语言:javascript
复制
RequestExecutionLevel admin

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-12 03:09:37

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

代码语言:javascript
复制
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应用程序:

如果“自动以管理员身份运行”的意思是绕过UAC提升,那么这实际上是不可能的,UAC的全部要点是允许用户确认/拒绝特权操作!一些应用程序通过安装NT服务来绕过此问题,该服务代表应用程序执行它们所需的任何操作。我不建议这样做,因为它会用服务填充用户的机器,如果服务没有正确编码,可能会削弱系统的安全性。

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

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

你链接到的论坛线程也告诉你关于two ways在快捷方式上设置SLDF_RUNAS_USER标志,这不会确保应用程序在所有情况下都是以管理员身份启动的,只有当应用程序从快捷方式启动时,但如果你不能更改应用程序本身,这可能是你唯一的选择。

票数 20
EN

Stack Overflow用户

发布于 2021-03-24 19:50:15

我真的是在用头撞砖墙,试图做到这一点。

正如@Anders所说:

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

这是正确的。但是,在某些情况下这是必需的。如果你确实遇到了这种情况,那么你可以按照this site I found的说明来做,它将允许你这样做。

TL;DR

installer.nsh文件(或等效文件)中插入以下内容之一

代码语言:javascript
复制
; Valid for the current user
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\${MAIN_PROGRAM_NAME}M.exe" "RUNASADMIN" 
 
 ; Effective for all users
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\${MAIN_PROGRAM_NAME}M.exe" "RUNASADMIN" 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8821476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档