VC如何将自身进程提升至管理员权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC如何将自身进程提升至管理员权限相关的知识,希望对你有一定的参考价值。

就这意思吧,我没办法动手.在百度找到的代码乱七八糟,求高手啊.
我需要管理员权限来运行程序

我理解的提升权限是指的是从Windows Vista开始的UAC代入的特性对吧?

提升权限微软只提供了两个方法:
1. exe的文件名为setup.exe,操作系统能够自动提升权限,会提示用户;
2. 第二个办法是在程序的manifest文件中指定权限。指定了管理员权限的程序会在资源管理器程序图标上加上盾牌图标,若用户没有禁用UAC,启动程序的时候操作系统会向用户发出请求权限的提示。
你要清楚的是你不要打绕开UAC提升权限的想法,这是不可能的。
另外,微软没有提供提升权限的API。

微软提供了专门的教程:http://msdn.microsoft.com/en-us/library/bb756973.aspx

一共是9步,但是前面5步和后面3步都是废话,最重要的是第六步:
http://msdn.microsoft.com/en-us/library/bb756929.aspx

参考资料:http://msdn.microsoft.com/en-us/library/bb756973.aspx

参考技术A 要动态的提升程序的权限,很遗憾的是,Microsoft并没有提供这样的方法,也就是,程序的运行权限,在启动时就已经决定了。于是我们想要动态提升权限,理论上是不可能的.. 参考技术B HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//代开当前进程信令
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
return;
//获取本地文艺表示用于在特定的系统中设置权限
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
//提升访问令牌权限
AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0)
参考技术C 3.67 icePub_runByAdmin

l 函数原型:
int WINAPI icePub_runByAdmin(char *strAppPathName,char *strSuParam)
输入:strAppPathName 带路径应用程序文件名;为空则默认本身应用程序
strSuParam 以管理员权限启动程序的命令行参数;为空则默认为"su "
输出:

l VC连接Lib方式声明
__declspec(dllexport)
int WINAPI icePub_runByAdmin(char *strAppPathName,char *strSuParam);

l 动态调用例程
VC sample 代码:
int runByAdmin(void)

int retCode=-1;

typedef int (WINAPI ICEPUB_RUNBYADMIN)(char *strAppPathName,char *strSuParam);
ICEPUB_RUNBYADMIN *icePub_runByAdmin = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
icePub_runByAdmin = (ICEPUB_RUNBYADMIN *)GetProcAddress(hDLLDrv, "icePub_runByAdmin");

if(icePub_runByAdmin)
retCode=icePub_runByAdmin("","");
if(hDLLDrv)
FreeLibrary(hDLLDrv);

if(retCode == 0)
exit(0);
if(retCode == -1)
AfxMessageBox("以管理员启动失败,请手动启动");

return retCode;


VB sample 代码:
Private Declare Function icePub_runByAdmin Lib "icePubDll.dll" (ByVal strAppPathName As String, ByVal strSuParam As String) As Integer

Private Sub Form_Load()

Dim a2 As Integer

If Command <> "su" Then
a2 = icePub_runByAdmin("", "")
'如果想启动别的程序,在第一个参数输入带路径的应用程序名,比如"d:\abc.exe"
'第2个参数是自定义命令行参数,为空则默认为"su"
If a2 = 0 Then
Unload Me
End If
End If

End Sub

http://dl.icese.net/dev.php?f=icePubDll.rar 下载追问

牛B,我如果还是不会的话再找你呀。能留Q没,哈哈

参考资料:http://zhidao.baidu.com/question/226413873.html

本回答被提问者采纳

解决windows10 里vs2015 附件进程调试提示“此任务要求应用程序有提升的权限”

 刚用windows10 ,感觉有些地方别扭。就在是vs2015开发程序的时候,就遇到了个问题。

首先 我是使用adminitrator账号登陆的。

双击vs解决方案,打开iis,然后结合vs2015里的代码调试,结果就提示 “此任务要求应用程序有提升的权限”。

解决windows10

纠结,明明已经是超级管理员administrator登陆的,竟然还是没权限,没搞明白windows10是咋回事。

纠结了半天,终于在网上找到一个解决方案:

打开vs的安装路径,我的是 C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\MSEnv\\ ,找到  VSLauncher.exe

解决windows10

右击该文件-- 属性 ---兼容性 ,勾选“以管理员身份运行此程序”,问题终于解决了。

关闭vs代码,重新用vs2015打开代码,就可以正常附件进程调试了。

 

解决windows10

 


 作者:沐雪

文章均系作者原创或翻译,如有错误不妥之处,欢迎各位批评指正。本文版权归作者所有,如需转载恳请注明。
​​​ 为之网-热爱软件编程 http://www.weizhi.cc/​



以上是关于VC如何将自身进程提升至管理员权限的主要内容,如果未能解决你的问题,请参考以下文章

MFC中提升至管理员权限

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

在没有管理员权限的情况下使用 .NET 框架部署应用程序

vc 程序获取管理员权限

如何提升windows7的权限

如何提升WINDOWS XP管理权限