我有一个 Qt/C++ 应用程序。应用程序需要注册一个 npapi 浏览器插件,该插件使用以下命令注册:
regsvr32 npmyplugin.dll
我可以使用 QProcess 甚至 system() 函数,但需要注册服务管理权限。在这种情况下如何启动服务。
一旦开始该过程,就无法提升您的权限。但是,您可以在启动新进程时要求更高的权限。当您在 Windows 上时,只需在以下字段中使用ShellExecuteEx
和设置:runas
lpVerb
SHELLEXECUTEINFO
SHELLEXECUTEINFO shExInfo = {0};
shExInfo.cbSize = sizeof(shExInfo);
shExInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shExInfo.hwnd = 0;
shExInfo.lpVerb = _T("runas"); // Operation to perform
shExInfo.lpFile = _T("regsvr32.exe"); // Application to start
shExInfo.lpParameters = _T("npmyplugin.dll"); // Additional parameters
shExInfo.lpDirectory = 0;
shExInfo.nShow = SW_SHOW;
shExInfo.hInstApp = 0;
ShellExecuteEx(&shExInfo);
return 0;
要在 Qt 应用程序中使用它,只需#include <windows.h>
确保为 Windows SDK 正确设置了 include 和 lib 变量。
要使用 Windows SDK 设置 Qt 创建者,请检查以下问题:如何将 Windows SDK 与 Qt Creator 一起使用
原始代码来自这个问题中接受的答案: 如何运行需要提升和等待的子进程?