介绍
默认的应用程序是无管理员权限的,开发中设置应用程序需要管理员权限运行时,启动应用程序会弹出"以管理员身份"运行的提示。这种情况对需要开机自启动的程序来说,弹出该提示是不友好的。
一般情况情况我们可以有如下几种方式解决:
- 开发一个服务,界面程序将需要权限的功能放置在服务中,通过界面程序和服务器的管道通信等来控制服务操作处理。
- 开发服务,服务启动后,启动有管理员权限的界面程序
- 修改系统设置,所有程序启动都带管理员权限
下面我们来说第三种方式的具体实现。
Windows修改
在安全设置
的下面 ,展开 本地策略
--> 安全选项
,在右边找到 用户帐户控制:以管理员批准模式运行所有管理员
,双击它,将 本地安全设置
更改为 已禁用
代码修改
组策略的修改可对应注册表的修改,注册表修改可参考windows说明:用户帐户控制组策略和注册表项设置 | Microsoft Learn
用户帐户控制:以管理员批准模式运行所有管理员的具体的注册表项如下,修改后重启系统生效:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA设置为0
具体代码如下:
#include <Windows.h>
#include <iostream>
int main()
{
HKEY key;
LPCSTR subKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"; // 要修改的键
LONG result = RegOpenKeyEx(
HKEY_LOCAL_MACHINE, // 键的根节点
subKey,
0,
KEY_WRITE, // 打开后可写入
&key);
if (result == ERROR_SUCCESS) {
DWORD data = 0; // 要写入键中的数据
LPCSTR valueName = "EnableLUA"; // 要写入的值的名称
DWORD dataSize = sizeof(data);
result = RegSetValueEx(
key,
valueName,
0,
REG_DWORD,
(BYTE*)&data,
dataSize);
if (result == ERROR_SUCCESS) {
std::cout << "Registry key modified successfully" << std::endl;
} else {
std::cerr << "Failed to modify registry key" << std::endl;
}
RegCloseKey(key);
} else {
std::cerr << "Failed to open registry key" << std::endl;
}
return 0;
}