c语言如何调用命令行并且是以管理员身份运行的命令行
我现在可以调用命令行,但是有些命令需要命令行以管理员身份运行,所以调用的时候有些命令无法完成,我想知道怎样让调用的命令行是以管理员身份运行的,急!别告诉我,右键以管理员身...
我现在可以调用命令行,但是有些命令需要命令行以管理员身份运行,所以调用的时候有些命令无法完成,我想知道怎样让调用的命令行是以管理员身份运行的,急!
别告诉我,右键以管理员身份运行之类的,太小儿科了没用!!!算了说具体点现在命令行里有以下两行代码
bcdedit /createstore e:/bcdtoread
bcdedit /export e:/bcdtoread
你们用c语言在程序里调用成功了再来回答,万分感谢! 展开
别告诉我,右键以管理员身份运行之类的,太小儿科了没用!!!算了说具体点现在命令行里有以下两行代码
bcdedit /createstore e:/bcdtoread
bcdedit /export e:/bcdtoread
你们用c语言在程序里调用成功了再来回答,万分感谢! 展开
7个回答
展开全部
如果你的命令要求以管理员身份运行,那么你自己的C语言程序也得是以管理员身份运行的,这可以通过在程序上点击 右键 -》以管理员权限运行 ,或者通过添加一个 manifest 文件的形式来提升权限。参见 jingyan.baidu.com/article/f0e83a25c2e78a22e5910137.html 中的步骤1,以外置文件的形式来提升权限。
更多追问追答
追问
我要的是将我调用的命令行以管理员身份运行,也就是cmd.exe以管理员身份运行,但是我又不能直接在用户主机上修改cmd.exe以管理员身份运行,整个过程要用c实现!
追答
难道我没有描述清楚?你的程序是宿主程序,所以只要你的程序是以管理员权限启动的,那么你启动的cmd.exe也应该是管理员权限,而要让你的程序以管理员权限启动,一是你可以让用户右键管理员权限运行,二是你可以通过添加 manifest 配置文件来让自己程序启动时要求管理员权限。因为你是C语言程序,没有资源之说,所以其他办法有,但不是可行的。
展开全部
用ShellExecute api,verb指定为“runas”,file指定为bcdedit.exe,parameter就是命令行中除去file后面的部分
注:runas在msdn中似乎并没有明确列出来
#include <windows.h>
#include <tchar.h>
#include <shellapi.h>
#pragma comment(lib, "shell32.lib")
#pragma comment(linker, "/subsystem:console")
int main()
{
ShellExecute(NULL, _T("runas"), _T("bcdedit.exe"), _T("/createstore e:/bcdtoread"), NULL, SW_SHOWDEFAULT);
ShellExecute(NULL, _T("runas"), _T("bcdedit.exe"), _T("/export e:/bcdtoread"), NULL, SW_SHOWDEFAULT);
return 0;
}
我电脑uac关的,没办法测试
另:用SW_HIDE的话就不会有控制台窗口弹出来。用ShellExecuteEx的话可以获取创建的Process的HANDLE,之后你可以获取返回值来判断操作是否成功,不过记得要CloseHandle
虽然我知道百度知道上扯淡的人非常多,但是正常的人看到“你们用c语言在程序里调用成功了再来回答”真的会感觉很恶心的
注:runas在msdn中似乎并没有明确列出来
#include <windows.h>
#include <tchar.h>
#include <shellapi.h>
#pragma comment(lib, "shell32.lib")
#pragma comment(linker, "/subsystem:console")
int main()
{
ShellExecute(NULL, _T("runas"), _T("bcdedit.exe"), _T("/createstore e:/bcdtoread"), NULL, SW_SHOWDEFAULT);
ShellExecute(NULL, _T("runas"), _T("bcdedit.exe"), _T("/export e:/bcdtoread"), NULL, SW_SHOWDEFAULT);
return 0;
}
我电脑uac关的,没办法测试
另:用SW_HIDE的话就不会有控制台窗口弹出来。用ShellExecuteEx的话可以获取创建的Process的HANDLE,之后你可以获取返回值来判断操作是否成功,不过记得要CloseHandle
虽然我知道百度知道上扯淡的人非常多,但是正常的人看到“你们用c语言在程序里调用成功了再来回答”真的会感觉很恶心的
追问
这个编译没问题但是执行的时候只有“按任意键退出”,我检查了下实际上没有执行!
追答
runas无效吗……我系统因为没开uac,是执行出结果了。
以前在公司实习的时候做过类似的东西,不过忘了当时怎么搞的
也有可能是CreateProcessAsUser,虽然我记得是ShellExecute
用CreateProcessAsUser虽然是可以,不过因为麻烦不少,所以也就懒得弄了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果楼主想通过非管理员身份,来执行管理员权限的工作的话,必须输入管理员密码的。不输入管理员密码,则不可能做到的。
开发方面,你可以参考MSDN的“Access Control”(访问控制),里面会涉及很多的知识点,不了解的话,一两句话说不清楚。简单的说,匿名越权操作的事情,你就别想了。vista以上版本控制的很严,除非你发现漏洞。
开发方面,你可以参考MSDN的“Access Control”(访问控制),里面会涉及很多的知识点,不了解的话,一两句话说不清楚。简单的说,匿名越权操作的事情,你就别想了。vista以上版本控制的很严,除非你发现漏洞。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里要看具体情况,你最好能贴出具体的运行代码。
一般来说,如果你本身是一个控制台程序,那么zhuhuaizhong所说是一个合理的办法。
但如果本身是一个windows窗口程序,通过抛出方式运行一个命令行,那么应该采用如下几个办法之一:
使用cmd的runas命令:runas /user:user_name program.exe
创建外部命令行函数提权,要使用以下几个函数之一(其它如winexec等方式无法实现),它们都有runas类似功能:
CreateProcess
CreateProcessAsUser
CreateProcessWithLogonW
CreateProcessWithTokenW
如果是在win7下,CreateProcessWithLogonW是推荐使用的方式,具体代码请根据函数名搜索,不在这里粘贴了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-05-13
展开全部
一楼说得对啊,你从来没操作过?WIN7的如下
开始 -> 所有程序 -> 附件 对"命令提示符"(右击) 选"以管理员权限运行"
开始 -> 所有程序 -> 附件 对"命令提示符"(右击) 选"以管理员权限运行"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询