如果系统有需要管理员的操作和普通用户的操作,根据最小权限原则,建议将管理员权限的内容启动为单独的进程,有普通权限的程序拉起,代码如下:
#include <windows.h>
#include <shellapi.h>
bool executeAsAdmin(const QString &filePath, const QStringList &arguments = QStringList()) {
// 将文件路径转换为Windows API需要的格式
std::wstring wFilePath = filePath.toStdWString();
// 拼接参数
std::wstring wParameters;
if (!arguments.isEmpty()) {
wParameters = arguments.join(" ").toStdWString();
}
// 关键:使用 "runas" 动词请求管理员权限
HINSTANCE result = ShellExecuteW(
nullptr, // 无父窗口
L"runas", // 动词:请求管理员权限
wFilePath.c_str(), // 要执行的文件路径
wParameters.empty() ? nullptr : wParameters.c_str(), // 参数
nullptr, // 使用文件所在目录为工作目录
SW_SHOWNORMAL // 正常显示窗口
);
// 返回值大于32表示成功
return (int)result > 32;
}
浙公网安备 33010602011771号