给一个从CSDN找到的代码
#include windows.h//这里自己加上括号
VOID ManagerRun(LPCSTR exe,LPCSTR param,INT nShow=SW_SHOW)
{ //注意:会跳出提示。
SHELLEXECUTEINFO ShExecInfo
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO)
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS
ShExecInfo.hwnd = NULL
ShExecInfo.lpVerb = "runas"
ShExecInfo.lpFile = exe
ShExecInfo.lpParameters = param
ShExecInfo.lpDirectory = NULL
ShExecInfo.nShow = nShow
ShExecInfo.hInstApp = NULL
BOOL ret = ShellExecuteEx(&ShExecInfo)
//等不及了,不等了。
CloseHandle(ShExecInfo.hProcess)
return
}
int main(int argc,char *argv[])
{
if(argc == 1) //初次运行,即双击EXE
{
ShowWindow(GetConsoleWindow(),SW_HIDE)
ManagerRun(argv[0],"2")
return 1
}else if(argc == 2) //再次运行,即上面那个ManagerRun
{
/*你的程序主代码在此*/
}
return 0
}
这里要看具体情况,你最好能贴出具体的运行代码。一般来说,如果你本身是一个控制台程序,那么zhuhuaizhong所说是一个合理的办法。
但如果本身是一个windows窗口程序,通过抛出方式运行一个命令行,那么应该采用如下几个办法之一:
1.
使用cmd的runas命令:runas
/user:user_name
program.exe
2.
创建外部命令行函数提权,要使用以下几个函数之一(其它如winexec等方式无法实现),它们都有runas类似功能:
CreateProcess
CreateProcessAsUser
CreateProcessWithLogonW
CreateProcessWithTokenW
如果是在win7下,CreateProcessWithLogonW是推荐使用的方式,具体代码请根据函数名搜索,不在这里粘贴了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)