我现在可以调用命令行,但是有些命令需要命令行以管理员身份运行,所以调用的时候有些命令无法完成,我想知道怎样让调用的命令行是以管理员身份运行的,急!
别告诉我,右键以管理员身份运行之类的,太小儿科了没用!!!算了说具体点现在命令行里有以下两行代码
bcdedit /createstore e:/bcdtoread
bcdedit /export e:/bcdtoread
你们用c语言在程序里调用成功了再来回答,万分感谢!
我要的是将我调用的命令行以管理员身份运行,也就是cmd.exe以管理员身份运行,但是我又不能直接在用户主机上修改cmd.exe以管理员身份运行,整个过程要用c实现!
追答难道我没有描述清楚?你的程序是宿主程序,所以只要你的程序是以管理员权限启动的,那么你启动的cmd.exe也应该是管理员权限,而要让你的程序以管理员权限启动,一是你可以让用户右键管理员权限运行,二是你可以通过添加 manifest 配置文件来让自己程序启动时要求管理员权限。因为你是C语言程序,没有资源之说,所以其他办法有,但不是可行的。
追问好像不行,这种方法我试过了,c程序确定是以管理员身份运行的,但是命令行还是不是以管理员身份运行的。
追答那试试像这样来调用 runas /user:administrator "bcdedit /createstore e:/bcdtoread"
追问a.bat,是我写得bat文件吧,/c是命令选项还是目录?
追答那是个例子而已,你可以将后边的改为你的相关的命令
追问'runas' : undeclared identifier
'user' : undeclared identifier
这两个没定义,是缺少什么头文件吗?
这是系统命令而并非c语言里的函数,你c代码怎么调用命令的?难道不是system函数?这俩应该是参数的一部分。
追问C:\Users\asus\Desktop\验证\123\123.cpp(9) : error C2146: syntax error : missing ')' before identifier 'bcdedit'
C:\Users\asus\Desktop\验证\123\123.cpp(9) : error C2059: syntax error : ')'
我的代码是
system("runas /user:administrator "bcdedit /createstore e:/bcdtoread"");
双引号要用转义字符。。。
system("runas /user:administrator \"bcdedit /createstore e:/bcdtoread\"");
我没有设administrator密码不输又出错。
同学,要想用管理员权限必须得得到才能用啊,这个必须得有密码才行,没密码能得到管理员权限那不成了木马病毒了吗?这样的用法微软肯定不允许的。
追问我电脑只有一个账户叫asus没有设密码
追答那如果你 asus 是管理员权限的话,可以将 administrotr 改为你 asus 用户,但这样你程序只在你本机运行有效,到了别的机器上,人家那里管理员账户不一定叫做 asus ,所以就不一定能运行了。
这个编译没问题但是执行的时候只有“按任意键退出”,我检查了下实际上没有执行!
追答runas无效吗……我系统因为没开uac,是执行出结果了。
以前在公司实习的时候做过类似的东西,不过忘了当时怎么搞的
也有可能是CreateProcessAsUser,虽然我记得是ShellExecute
用CreateProcessAsUser虽然是可以,不过因为麻烦不少,所以也就懒得弄了
这里要看具体情况,你最好能贴出具体的运行代码。
一般来说,如果你本身是一个控制台程序,那么zhuhuaizhong所说是一个合理的办法。
但如果本身是一个windows窗口程序,通过抛出方式运行一个命令行,那么应该采用如下几个办法之一:
使用cmd的runas命令:runas /user:user_name program.exe
创建外部命令行函数提权,要使用以下几个函数之一(其它如winexec等方式无法实现),它们都有runas类似功能:
CreateProcess
CreateProcessAsUser
CreateProcessWithLogonW
CreateProcessWithTokenW
如果是在win7下,CreateProcessWithLogonW是推荐使用的方式,具体代码请根据函数名搜索,不在这里粘贴了。