【问题标题】:How do I check if my program is running under admin privileges via C++? [duplicate]如何通过 C++ 检查我的程序是否在管理员权限下运行? [复制]
【发布时间】:2025-12-01 23:05:09
【问题描述】:

如何检查我的 C++ 程序是否以管理员权限运行?

我以这种方式批量处理

set fold=%random%

mkdir "C:\Windows\%fold%"

if errorlevel 1 (

goto Tag1

)

goto Tag2

但是我不能对 C++ 使用相同的东西,因为我不知道如何将变量 1 的 %random% 的值传输到 %fold% 的变量 2,而且我不知道是否存在错误级别C++。

在这种情况下谁能帮助我,或者有什么方法可以检查我的程序是否以管理员权限运行?

【问题讨论】:

标签: c++ winapi batch-file admin elevated-privileges


【解决方案1】:

您可以使用 OpenProcessToken / GetTokenInformation 对:https://*.com/a/8196291/3235496

另一种方法是AccessCheck 函数。

最后一个 IsUserAnAdmin 函数:它很简单但已弃用(可从 Windows XP/Windows Server 2003 获得)。

你为什么要检查?尝试可能是一个很好的策略:如果有效,您就拥有足够的权限(可能是管理员权限的子集)。

PS

出于好奇...您的批处理文件的 C++ 翻译应基于 CreateDirectory 函数。如果失败,请通过GetLastError(返回代码ERROR_ACCESS_DENIED)检查扩展错误信息。但是,正如 David Heffernan 所说,将文件夹喷射到系统目录中并不是一个好主意。

【讨论】:

  • 只是为了测试。如果不提升,则不会创建文件夹。如果提升,稍后创建的文件夹将被删除。
  • 你为什么说 IsUserAnAdmin() 已被弃用?我没有找到这种弃用的确认。该文档将其描述为“CheckTokenMembership 的包装器”。
  • @Bemipefe 它位于 docs.microsoft.com/en-us/windows/win32/shell/deprecated-api 的已弃用的 Shell API 部分。它可能会被更新的 API 取代(IsUserAnAdmin 可用于“要求”部分中指定的操作系统。它可能会在后续版本中更改或不可用) .
【解决方案2】:

您可以在 MSDN 中找到答案:

https://support.microsoft.com/kb/118626

您的应用程序也应该有一个清单。

【讨论】:

  • 我得到这个错误:错误:main must return int void main(int argc, char **argv)
  • @Pawan 在该行将void 替换为intmain 必须返回int :)
  • 为防止链接失效,请在此处的答案中包含解决方案的精髓:)
  • @MagnusHoff 现在我收到错误:未定义对 IsCurrentUserLocalAdministrator() 的引用
  • @Pawan 请研究您的新问题,看看您是否能找到解决方案。如果没有,您可以使用“”按钮提出新问题 :)