[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 批处理为何以管理员权限运行闪退

批处理文件名称如下:
第一次请先运行(64位).cmd
内容如下:
  1. @echo off
  2. copy *.dll                  %windir%\SysWOW64 /y
  3. copy *.ocx                  %windir%\SysWOW64 /y
  4. %windir%\SysWOW64\regsvr32 midas.dll
  5. %windir%\SysWOW64\regsvr32 Biokey.ocx
  6. %windir%\SysWOW64\regsvr32 VisualCard.ocx
复制代码
32位的是copy到system32,这个批处理改名比如改名为www.cmd,右键以管理员权限运行没有问题,不改名双击运行就闪退,打开cmd命令行,然后运行这个批处理也没有问题。
不知道是什么原因。

pushd "%~dp0"
cd/d "%~dp0"
(%~d0)&cd "%~p0"
任选

TOP

回复 2# 老刘1号


    兄弟这个没有用的。已经试过了。

TOP

本帖最后由 freesoft00 于 2018-9-1 15:36 编辑

改名,双击,右键管理员运行,cmd中运行都可以。
不改名,双击可以,cmd中可以,右键管理员运行不行。
Administrator用户登录,uac状态是禁用状态。

昨天的一台机器是uac启用状态,也是同样的问题,代码我是实在没有看到有哪里问题,没有错误提示,cmd中运行时正常的。一开始就先加大pushd
批处理文件编码也是ansi

两天电脑都安装了sql 2005,一台有杀毒软件,一台是vmware虚拟系统裸机。
下面是这台电脑的环境变量:
C:\Users\Administrator>path
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32
\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\80\Tools\Bi
nn\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\
Microsoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\Microsoft SQL Server\
90\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Binn\VSShell\C
ommon7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\Private
Assemblies\

TOP

回复 4# freesoft00


    改的啥名?
bat名不要和外部命令名重复
1

评分人数

TOP

回复 5# 老刘1号


    任意,wwee.bat 3344.cmd 好吧.cmd,什么都可以,唯独 第一次请先运行(32位).cmd  第一次请先运行(64位).cmd 不行

TOP

去掉括号就好了
1

评分人数

这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

回复 7# /zhqsystem/zhq


    恩,确实是英文括号的问题,不知道为什么会这样呢?

TOP

回复 7# /zhqsystem/zhq


    想了想还是有点疑问。
去掉括号也属于改名了。
不改名有括号的时候为什么双击可以正常运行,在cmd中也可以正常运行。

TOP

回复 9# freesoft00
不知道为什么,不过可以考虑在用一个批获取权限来调用这个,建议用内置区分标签goto或call调用自身
示例
if /i "%Processor_Architecture:~-2%"=="64" (call:NTX64)ELSE call:NTX86
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

本帖最后由 WHY 于 2018-9-3 11:10 编辑

bat 文件右键 "以管理员身份运行" 由注册表项:HKEY_CLASSES_ROOT\batfile\shell\runas\command 控制,其默认值为:
%SystemRoot%\System32\cmd.exe /C "%1" %*
cmd 文件对应的注册表项是: cmdfile

虽然参数 %1 被引号包裹,但注册表程序会把引号脱去(如果没有空格的话),再把它当作 CMD 的参数,交给 CMD 处理。
CMD 在遇到小括弧、& 等字符的参数时,不会在参数外层自动补上引号,导致解析错误而闪退。

如果不希望修改路径或文件名,可以考虑修改对应的注册表值,再加一对双引号:
%SystemRoot%\System32\cmd.exe /C ""%1"" %*

该办法在Win10 v1803 中文专业版,Win7 sp1 中文旗舰版测试通过
2

评分人数

TOP

回复 11# WHY


    一楼倒没有必须使用那个名称的问题。
只是想弄明白这个问题,不能不求甚解就过去了。
多谢详细解释了!

TOP

回复 11# WHY


    那么类似的问题,网上的那些右键获取管理员权限的右键菜单,我看注册表的命令是:
cmd.exe /c takeown /f "%1" /r /d y && icacls "%1" /grant administrators:f /t
其中的%1也可以添加两个双引号是不是?都可以这样处理。

TOP

回复 13# freesoft00


    楼主要是对这个话题感兴趣,就请亲自测试一下,然后把你测试使用的环境、数据、方法、结果分享出来呗。

TOP

返回列表