如何在程序里模拟在cmd里用管理员权限运行一条指令

转自csdn的yangw150zhao4zhong1

转自http://www.cnblogs.com/del/archive/2008/02/13/1068229.html

http://blog.csdn.net/go121015603/article/details/41870707

win7下,我想执行net user administrator /active:yes这样一条指令,用system()函数执行时返回错误,返回错误是“发生系统错误 5 拒绝访问”,原来是没有管理员权限,用手动右键点击cmd.exe,选择使用管理员权限运行就ok了,但在代码里如何能模拟管理员权限的cmd来运行一条指令呢?

ShellExecuteA(0,"runas","cmd","","",1); 
这样是以管理员权限打开了cmd窗口

ShellExecute(0,"runas", LPCSTR("cmd.exe"),LPCSTR("/c net user administrator /active:yes"),"",SW_HIDE);

ShellExecute(
  hWnd: HWND;        {指定父窗口句柄}
  Operation: PChar;  {指定动作, 譬如: open、print}
  FileName: PChar;   {指定要打开的文件或程序}
  Parameters: PChar; {给要打开的程序指定参数; 如果打开的是文件这里应该是 nil}
  Directory: PChar;  {缺省目录}
  ShowCmd: Integer   {打开选项}
): HINST;            {执行成功会返回应用程序句柄; 如果这个值 <= 32, 表示执行错误}

//返回值可能的错误有:
                       = 0   {内存不足}
ERROR_FILE_NOT_FOUND   = 2{文件名错误}
ERROR_PATH_NOT_FOUND   = 3{路径名错误}
ERROR_BAD_FORMAT       = 11; {EXE 文件无效}
SE_ERR_SHARE           = 26; {发生共享错误}
SE_ERR_ASSOCINCOMPLETE = 27; {文件名不完全或无效}
SE_ERR_DDETIMEOUT      = 28; {超时}
SE_ERR_DDEFAIL         = 29; {DDE 事务失败}
SE_ERR_DDEBUSY         = 30; {正在处理其他 DDE 事务而不能完成该 DDE 事务}
SE_ERR_NOASSOC         = 31; {没有相关联的应用程序}

//ShowCmd 参数可选值:
SW_HIDE            = 0{隐藏}
SW_SHOWNORMAL      = 1{用最近的大小和位置显示, 激活}
SW_NORMAL          = 1{同 SW_SHOWNORMAL}
SW_SHOWMINIMIZED   = 2{最小化, 激活}
SW_SHOWMAXIMIZED   = 3{最大化, 激活}
SW_MAXIMIZE        = 3{同 SW_SHOWMAXIMIZED}
SW_SHOWNOACTIVATE  = 4{用最近的大小和位置显示, 不激活}
SW_SHOW            = 5{同 SW_SHOWNORMAL}
SW_MINIMIZE        = 6{最小化, 不激活}
SW_SHOWMINNOACTIVE = 7{同 SW_MINIMIZE}
SW_SHOWNA          = 8{同 SW_SHOWNOACTIVATE}
SW_RESTORE         = 9{同 SW_SHOWNORMAL}
SW_SHOWDEFAULT     = 10; {同 SW_SHOWNORMAL}
SW_MAX             = 10; {同 SW_SHOWNORMAL}


1、如果命令中的路径包含空格,要把路径去掉头尾用双引号包含起来。

 
 

例:strPath = “”D:\\\"te st\\\"test.exe;(用“\”进行字符转义)

 
 

 

 
 

2、用变量传命令的时候,要在命令字符开始加上"/c",不然命令不会执行。

 
 

例:strCommand = "/c " + "date";

 
 

ShellExecute(NULL, "open", "cmd", strCommand, NULL, SW_SHOW);

 
 

 

 
 

3、用SW_HIDE使cmd窗口静默执行

 
 

例:ShellExecute(NULL, "open", "cmd", strCommand, NULL, SW_HIDE);

 
 

 

 
 

4、命令行执行结果可以使用">"来保存到文件。

 
 

例:ShellExecute(NULL, "open", "cmd", "/c date >D:\\test.txt", NULL, SW_HIDE);

 
 

 

 
 

5、通过对比输出文件进行结果分析。

 
 

 

 
 

6、strCommand不支持直接使用..\,要使用相对路径可以用tempdir来实现。

 
 

例:假设text.txt在test.exe的上一层目录中,ShellExecute(NULL, "open", "cmd", "/c D:\\test\\test.exe "tempdir\\..\\..\\text.txt >D:\\test.txt", NULL, SW_HIDE);

 

转载于:https://www.cnblogs.com/bixiongquan/p/4389914.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以尝试以下操作: 1. 首先,创建一个新的文本文件。在 Windows 上,右键单击桌面或文件夹中的空白处,选择“新建”->“文本文档”。 2. 给文件命名,例如“runasadmin.bat”。 3. 右键单击新创建的文件,选择“编辑”。 4. 将以下内容复制并粘贴到文件中: ```batch @echo off echo 正在以管理员权限启动命令行窗口... echo. :: 检查是否已以管理员身份运行脚本 net session >nul 2>&1 if %errorlevel% == 0 ( echo 已以管理员权限运行脚本。 ) else ( echo 正在请求管理员权限... echo. goto UACPrompt ) :: 执行需要以管理员权限运行的程序 echo. echo 开始执行程序... echo. start "" "C:\path\to\your\program.exe" goto End :UACPrompt echo 此脚本需要以管理员身份运行才能继续。 echo. echo 请单击“是”以继续... echo. :: 请求管理员权限 setlocal DisableDelayedExpansion set "batchPath=%~0" setlocal EnableDelayedExpansion echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" echo UAC.ShellExecute "!batchPath!", "", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" exit /B :End echo. echo 程序已执行完毕。 echo. pause ``` 5. 将 `C:\path\to\your\program.exe` 替换为需要以管理员权限运行的程序的路径。确保在路径中使用双引号,例如 `"C:\Program Files\MyProgram\program.exe"`。 6. 保存并关闭文件。 现在,当您运行该批处理文件时,它将检查是否已以管理员身份运行,如果没有,则请求管理员权限。然后,它将以管理员权限启动命令行窗口,并执行指定的程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值