CMD命令行中以管理员权限启动应用程序实现方法_DOS/BAT

很多时候我们需要管理员权限来运行bat那么就需要结合vbscript来实现了

方法一:

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit

常用

@echo off
mode con lines=30 cols=60
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
rem 下面可以写你的bat代码了

方法二:

@echo off
%1 %2
ver|find "5.">nul&&goto :st
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :st","","runas",1)(window.close)&goto :eof
:st
copy "%~0" "%windir%\system32\"

原理类似

ShellExecute method

Run a script or application in the Windows Shell.

Syntax
.ShellExecute "application", "parameters", "dir", "verb", window

.ShellExecute 'some program.exe', '"some parameters with spaces"', , "runas", 1
Key
application The file to execute (required)
parameters Arguments for the executable
dir Working directory
verb The operation to execute (runas/open/edit/print)
window View mode application window (normal=1, hide=0, 2=Min, 3=max, 4=restore, 5=current, 7=min/inactive, 10=default)
Note the different (double " and single ' ) quotes that can be used to delimit paths with spaces.

The runas verb is undocumented but can be used to elevate permissions. When a script is run with elevated permissions several aspects of the user environment may change: The current directory, the current TEMP folder and any mapped drives will be disconnected.

runas will fail if you are running in WOW64 (a 32 bit process on 64 bit windows) for example %systemroot%\syswow64\cmd.exe ...

The ShellExecute method is a member of the IShellDispatch2 object.

Examples

Run a batch script with elevated permissions, flag=runas:

Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "E:\demo\batchScript.cmd", "", "", "runas", 1

Run a VBScript with elevated permissions, flag=runas:

Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "cscript", "E:\demo\vbscript.vbs", "", "runas", 1

“If you don't execute your ideas, they die” ~ Roger Von Oech

Related:

Run with elevated permissions - Script to run as Admin
.Exec - Execute command, returning an object
.Run - Run a command
joeware.net - CPAU (Create Process As User) like RunAs but with an options to encrypt the password.
Equivalent CMD command: ShellRunAs - Run a command under a different user account

 批处理文件中的%~dp0表示含义

~是扩展的意思,相当于把一个相对路径转换绝对路径
%0代指批处理文件自身
%1表示批处理文件命令行接收到的第一个参数,%2表示第二个,以此类推
%~d0 是指批处理所在的盘符,其中d代表drive
%~p0 是指批处理所在的目录,其中p代表path
%~dp0 是批处理所在的盘符加路径

cd %~dp0 就是进入批处理所在目录了

详细解释还可参考命令 call /?

自从Vista带来了UAC之后,应用程序就变成了两种,有管理员权限的,和没有管理员权限的。一些老的应用程序会莫名其妙地出错,这时候就要考虑右击应用程序,然后“以管理员身份运行”。这还不是什么大问题,exe文件的右键菜单里都会有这个,但是对于一些脚本文件(cmd, js一类)来说,就没那么方便了。通常需要重新开一个带管理员权限的命令行窗口,然后打很多cd回到刚的文件夹,然后再运行脚本,相当麻烦。

搜了一下,找到一个解决办法。把下面的代码保存为Elevate.js:

var command = WScript.Arguments.Item(0);
var argument = "";
for (var i = 0; i < WScript.Arguments.Count(); ++i){
 argument += WScript.Arguments.Item(i) + " ";
}

try{
 var shellapp = new ActiveXObject("Shell.Application");
 shellapp.ShellExecute(command, argument, null, "runas", 1);
}
catch(e){
 WScript.Echo("Something wrong: " + e.description);
}

以后要以管理员身份运行程序的时候,只要输入“Elevate <exefile> <arguments>”就可以了,比如“Elevate cmd /k”。

当然,这个逃不过UAC的检查,还是会有一个对话框弹出来要点“确定”的。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索命令行
, cmd
, 管理员权限
启动应用程序
bat执行cmd命令行、bat如何运行cmd命令行、bat脚本执行cmd命令行、bat以管理员启动cmd、命令行执行bat文件,以便于您获取更多的相关知识。

时间: 2024-08-01 07:53:26

CMD命令行中以管理员权限启动应用程序实现方法_DOS/BAT的相关文章

PowerShell中以管理员权限启动应用程序的方法_PowerShell

又一个PowerShell比CMD好的地方.在CMD中用管理员权限来启动应用程序很复杂,但在PowerShell中就简单多了,如下: 复制代码 代码如下: Start-Process notepad -Verb runas Start-Process "$PSHOME\powershell.exe" -Verb runas

CMD命令行将当前磁盘所有文件名写入到文本文件的方法_DOS/BAT

有没有一种办法可以把某磁盘下所有文件名称一次性获取呢?除了批量获取文件名之外,当然windows自身也是可以实现的!下面就教你使用CMD命令行将磁盘所有文件名写入到文本. dir f:/ > d:/1.txt //将f盘下的目录 写入到d:/1.txt中 dir d:/ >> d:/1.txt //将d盘下的目录 追加到d:/1.txt中 dir /s d:/音乐 > d:/1.txt // 将d:/音乐的目录及子目录文件全部信息全部建立在d:/1.txt中 dir /s /b d

Android shell命令行中过滤adb logcat输出的几种方法_Android

我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adb logcat输出的方法.        1.只显示需要的输出(白名单)        最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配.简单的匹配一行当中的某个字符串,例如 MyApp:        adb logcat | grep MyApp       

win7 32位系统CMD命令行提示“不是内部或者外部命令”的解决方法

  很多win7系统用户利用CMD命令查询系统的信息或者是判断网络的好坏.CMD命令能够帮助用户更好的操作使用电脑.不过在使用该命令时也会出现一些问题,比如有win7 32位系统用户反馈在CMD命令行中输入任何命令,系统都提示不是内部或者外部命令,也不是可运行的程序或者批处理文件.那么遇到这种情况我们该如何解决呢?下面小编跟大家分享下关于这个问题的解决方法! 方法如下: 1.鼠标点击win7 32位系统"开始"菜单,选择"运行"选项; 2.在打开的运行对话框中输入&

在命令行中运行“mvn compile”因为中文报错

在命令行中运行mvn compile 报错:  解决方法: 方式一: 使用maven-compiler-plugin插件,指定编码: Xml代码   <plugin>                   <groupId>org.apache.maven.plugins</groupId>                   <artifactId>maven-compiler-plugin</artifactId>               

新建了一个windows服务,关机再开机能够自启动,但是用cmd命令行创建此服务需要手动启动

问题描述 有没有什么方法,创建此windows服务之后,不用手动启动,一运行此windows服务,它就自启动了?现在这个windows方法,运行完毕之后,需要手动去启动,但是关机开机之后他能自启动,我想要的是,运行完毕之后能达到像开机关机之后自启动这个情况,希望各位大神指点 解决方案 本帖最后由 a981583536 于 2016-07-11 13:05:10 编辑解决方案二:自己去看下Program.cs的Main函数吧默认如果是服务的话通过ServiceBase.Run来运行你可以自己加个参

ide-c程序用cmd命令行编译链接的exe跟在IDE中生成的一样么?

问题描述 c程序用cmd命令行编译链接的exe跟在IDE中生成的一样么? 就是用cl命令生成的exe,和visual c++6.0的对比,是否一样,如果不一样怎么让他们一样? 解决方案 主要是一些编译选项,你cl命令行需要自己跟VC所配置的编译选项一致. 解决方案二: 你可以写一个小程序: void main(int argc, char ** args) { for (int i = 0; i < argc; i++) cout << args[i] << endl; sy

在Winform程序中设置管理员权限及为用户组添加写入权限

原文:在Winform程序中设置管理员权限及为用户组添加写入权限 在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行程序具有管理员权限或者设置运行程序的目录具有写入的权限,如果是在操作系统里面,我们可以设置运行程序以管理员身份运行,或者设置Users用户组在运行目录中具有写入权限都可以解决问题,不过如果我们想通过C#代码进行自动的处理,那么应该如何实现呢? 1.系统设置管理员权限或者目录写入权限 如果我们需要让程序以管理员身份运行,那么可以通过设置快捷方

CMD命令行高级教程精选合编合集_DOS/BAT

目录第一章 批处理基础第一节 常用批处理内部命令简介1.REM 和 ::2.ECHO 和 @3.PAUSE4.ERRORLEVEL5.TITLE6.COLOR7.mode 配置系统设备8.GOTO 和 :9.FIND10.START11.assoc 和 ftype12.pushd 和 popd13.CALL14.shift15.IF16.setlocal 与 变量延迟(ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION启动或停用延缓环境变量扩展名.)