我的目标:以高优先级运行批处理文件,而无需打开任务管理器。
问题是在学校cmd.exe
被阻止(由于限制),但我可以通过Windows资源管理器或使用VBScript函数.Run
或.ShellExecute
运行批处理文件。它在我使用.Run "G:\test.bat"
但不是.Run "cmd /c G:\test.bat"
时有效。当我在批处理文件中使用start
函数启动另一个批处理文件时,它不起作用。在这种情况下,我收到类似于“此程序被策略阻止”的错误。当我从“开始>运行> cmd”运行cmd.exe
时出现同样的错误。
因此,当我从VBScript运行批处理文件时,Windows不会检测到它正在使用被阻止的cmd
。我想知道是否有一个VBScript函数启动一个具有高优先级的程序。也许它会在另一个文件扩展名和另一种语言中。或者,如果你有其他想法发布它。
答案 0 :(得分:0)
您应该能够使用WMI来完成此任务。您需要将Win32_ProcessStartup
类与Win32_Process
结合使用来定义启动参数并运行批处理文件。使用PriorityClass
类的Win32_ProcessStartup
属性为您生成的进程指定优先级。
Const PRIORITY_CLASS_HIGH = 128
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.PriorityClass = PRIORITY_CLASS_HIGH
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
objProcess.Create "G:\test.bat", null, objConfig, intProcessID
答案 1 :(得分:0)
在32位窗口上,如果cmd被阻止,command.com仍会运行。你很幸运,管理员没有在禁用cmd的对话框中勾选禁用bat文件的复选框。
WinNT中的command.com将所有命令传递给cmd.exe以供执行。启动命令并输入。
也没有什么能阻止你使用命令提示符,它只是在每个命令后退出。做一个目录
cmd /k dir
它会做一个dir然后退出。
所以
cmd /k start /high notepad
这是政策的描述,我用粗体表达某些词语。
禁用命令提示符 用户配置\管理模板\系统
描述 阻止用户运行交互式命令提示符Cmd.exe。此策略还确定批处理文件(.cmd和.bat)是否可以在计算机上运行。
如果您启用此策略并且用户尝试打开命令窗口,系统将显示一条消息,说明策略阻止了该操作。
注意
如果计算机使用登录,注销,启动或关闭批处理文件脚本,或者对于使用终端服务的用户,请勿阻止计算机运行批处理文件。