如何从 C++ 代码创建具有管理员权限的服务

Posted

技术标签:

【中文标题】如何从 C++ 代码创建具有管理员权限的服务【英文标题】:How to create a service with administrator rights from c++ code 【发布时间】:2016-05-13 10:45:21 【问题描述】:

我创建了一个 bat 来执行脚本文件 (.vbs) 以从 Windows 注册表中获取已安装的软件列表。 我按照 2 种方式执行 bat 文件。

1) 从命令提示符(cmd) 执行 bat 文件。 2)创建一个服务来执行bat文件。(我已经创建了一个进程)。

两个输出不同。

我认为注册表访问仅限于服务。那么如何以管理员身份创建服务或启动服务,例如 cmd 作为管理员。

【问题讨论】:

一个服务通常在本地系统帐户下运行,可能有另一组从管理员帐户安装的应用程序。此外,查询注册表是向系统询问已安装应用程序的错误方法。 您的问题诊断错误。第一步,正确诊断问题。第 2 步,考虑可能的解决方案。您需要在继续之前完成第 1 步。 【参考方案1】:

您需要使用CreateService 函数。如果您使用nullptr 作为lpServiceStartName 的参数,那么它将以管理员身份运行。

【讨论】:

来自CreateService: "lpServiceStartName: 如果此参数为NULL,CreateService 使用LocalSystem account。" 这是不是管理员帐户.我不知道为什么有人会赞成一个实际上不正确的答案。 @IInspectable 我没有说管理员帐户。它具有管理员权限。 “它将以管理员身份运行” - 这是不正确的。如文档所述,它将作为本地系统运行。这是与管理员环境不同的环境。

以上是关于如何从 C++ 代码创建具有管理员权限的服务的主要内容,如果未能解决你的问题,请参考以下文章

如何以管理员权限从 Windows 服务运行程序

如何创建只有具有管理员和管理频道权限的成员才能使用的“创建文本/vc 频道”命令?

创建具有从普通用户帐户运行的管理权限的计划任务

如何检查用户是不是在win32中具有本地管理员权限

如何确定用户是不是具有管理员权限?

CX_Freeze - 构建具有管理员权限的 .msi