jpa*_*ugh 57 cmd windows-vista windows-7
我有一个小脚本,在Windows上为我正在管理的Bazaar存储库执行构建和安装过程.我试图运行与提升,管理权限的脚本中的Windows外壳程序(CMD.EXE) -就好像我右键单击它并选择以管理员身份运行,但不使用,需要使用的任何方法图形界面.
sla*_*tir 58
按开始按钮.在搜索框中输入"cmd",然后按Ctrl+ Shift+Enter
jpa*_*ugh 57
您所要做的就是使用该runas命令以管理员身份运行您的程序(需要注意).
runas /user:Administrator "cmdName parameters"
Run Code Online (Sandbox Code Playgroud)
就我而言,这是
runas /user:Administator "cmd.exe /C %CD%\installer.cmd %CD%"
Run Code Online (Sandbox Code Playgroud)
请注意,您必须使用引号,否则runas命令会将switch选项吞噬到cmd.
另请注意,管理shell(cmd.exe)在C:\ Windows\System32文件夹中启动.这不是我想要的,但很容易将当前路径传递给我的安装程序,并使用绝对路径引用它.
以这种方式使用runas需要启用管理帐户,这不是Windows 7或Vista上的默认帐户.但是,这是一个关于如何启用它的一个很好的教程,有三种不同的方式:
我自己通过打开管理工具,本地安全策略,然后导航到本地策略\安全选项并将帐户:管理帐户状态策略的值更改为已启用来启用它,这不是链接中显示的三种方式.
更简单的方法:
C:> net user Administrator /active:yes
Run Code Online (Sandbox Code Playgroud)
And*_*ers 40
批处理/ WSH混合可以调用ShellExecute来显示UAC提升对话框...
@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||(
cscript //E:JScript //nologo "%~f0"
@goto :EOF
)
echo.Performing admin tasks...
REM call foo.exe
@goto :EOF
@end @ELSE
ShA=new ActiveXObject("Shell.Application")
ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+"\"","","runas",5);
@end
Run Code Online (Sandbox Code Playgroud)
Amr*_*Ali 11
:: ------- Self-elevating.bat --------------------------------------
@whoami /groups | find "S-1-16-12288" > nul && goto :admin
set "ELEVATE_CMDLINE=cd /d "%~dp0" & call "%~f0" %*"
findstr "^:::" "%~sf0">temp.vbs
cscript //nologo temp.vbs & del temp.vbs & exit /b
::: Set objShell = CreateObject("Shell.Application")
::: Set objWshShell = WScript.CreateObject("WScript.Shell")
::: Set objWshProcessEnv = objWshShell.Environment("PROCESS")
::: strCommandLine = Trim(objWshProcessEnv("ELEVATE_CMDLINE"))
::: objShell.ShellExecute "cmd", "/c " & strCommandLine, "", "runas"
:admin -------------------------------------------------------------
@echo off
echo Running as elevated user.
echo Script file : %~f0
echo Arguments : %*
echo Working dir : %cd%
echo.
:: administrator commands here
:: e.g., run shell as admin
cmd /k
Run Code Online (Sandbox Code Playgroud)
对于演示:self-elevating.bat"带空格的路径"arg2 3 4"另一个长论证"
这是另一个不需要创建临时文件的版本.
<!-- : --- Self-Elevating Batch Script ---------------------------
@whoami /groups | find "S-1-16-12288" > nul && goto :admin
set "ELEVATE_CMDLINE=cd /d "%~dp0" & call "%~f0" %*"
cscript //nologo "%~f0?.wsf" //job:Elevate & exit /b
-->
<job id="Elevate"><script language="VBScript">
Set objShell = CreateObject("Shell.Application")
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objWshProcessEnv = objWshShell.Environment("PROCESS")
strCommandLine = Trim(objWshProcessEnv("ELEVATE_CMDLINE"))
objShell.ShellExecute "cmd", "/c " & strCommandLine, "", "runas"
</script></job>
:admin -----------------------------------------------------------
@echo off
echo Running as elevated user.
echo Script file : %~f0
echo Arguments : %*
echo Working dir : %cd%
echo.
:: administrator commands here
:: e.g., run shell as admin
cmd /k
Run Code Online (Sandbox Code Playgroud)
小智 6
虽然@amr ali 的代码很棒,但我有一个例子,我的 bat 文件包含> <符号,并且由于某种原因它被它们阻塞了。
我找到了这个。只需将其全部放在代码之前,它就可以完美运行。
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
Run Code Online (Sandbox Code Playgroud)