【问题标题】:Batch file: start at high priority with cmd blocked批处理文件:在 cmd 被阻止的情况下以高优先级启动
【发布时间】:2014-10-23 20:06:34
【问题描述】:

我的目标:在不打开任务管理器的情况下以高优先级运行批处理文件。

问题是在学校cmd.exe 被阻止(由于限制),但我可以通过 Windows 资源管理器或使用 VBScript 函数.Run.ShellExecute 运行批处理文件。它在我使用.Run "G:\test.bat" 而不是.Run "cmd /c G:\test.bat" 时有效。当我在批处理文件中使用start 函数来启动另一个批处理文件时,它不起作用。在这种情况下,我收到类似于“此程序被策略阻止”的错误。当我从“开始 > 运行 > cmd”运行 cmd.exe 时,我得到了同样的错误。

所以不知何故,当我从 VBScript 运行批处理文件时,Windows 没有检测到它正在使用被阻止的 cmd。我想知道是否有一个 VBScript 函数可以启动具有高优先级的程序。也许它会是另一种文件扩展名和另一种语言。或者,如果您有其他想法,请发布。

【问题讨论】:

    标签: windows batch-file vbscript cmd


    【解决方案1】:

    您应该能够使用 WMI 来完成此操作。您需要结合使用Win32_ProcessStartup 类和Win32_Process 来定义启动参数并运行您的批处理文件。使用Win32_ProcessStartup 类的PriorityClass 属性为您生成的进程指定优先级。

    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
    

    【讨论】:

      【解决方案2】:

      在 32 位 Windows 上,如果 cmd 被阻止,command.com 仍会运行。你很幸运,管理员没有在你禁用 cmd 的对话框中勾选禁用 bat 文件的复选框。

      WinNT 中的command.com 将所有命令传递给cmd.exe 执行。启动命令并输入。

      也没有什么能阻止你使用命令提示符,它只是在每个命令后退出。做一个目录

      cmd /k dir
      

      它会做一个目录然后退出。

      所以

      cmd /k start /high notepad
      

      这是政策的描述,我用粗体显示了某些词。

      禁用命令提示符 用户配置\管理模板\系统

      说明 阻止用户运行 interactive 命令提示符 Cmd.exe。此策略还确定批处理文件(.cmd 和 .bat)是否可以在计算机上运行。

      如果您启用此策略并且用户尝试打开命令窗口,系统会显示一条消息,说明策略阻止该操作。

      注意

      如果计算机使用登录、注销、启动或关闭批处理文件脚本,或者对于使用终端服务的用户,请不要阻止计算机运行批处理文件。


      【讨论】:

        猜你喜欢
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多