【问题标题】:WshShell Run Without Waiting But Exec for Status Update (run vs exec issue)WshShell 运行时不等待但执行状态更新(运行与执行问题)
【发布时间】:2013-05-21 11:09:58
【问题描述】:

在 Windows 环境下通过 JS 启动脚本。

我需要两件事:

  1. 无弹窗(即shell.run(cmd, 0)
  2. 我等不及线程完成(即shell.exec()shell.run(cmd, 0, false)

那我该怎么办?这些似乎相互排斥。我等不及它完成,但我会轮询它的状态以查看它何时完成。显然 exec 更适合这个,因为它包含状态等......虽然我需要取消弹出命令窗口,因为这个系统可以有很多......

有人知道我能做什么吗?无论如何我都会进行轮询,但无需等待进程完成,run 将立即返回 0,除了尝试在进程列表中查找图像名称之外,我不知道它是否已完成......但我不喜欢在没有 PID 的情况下这样做,我宁愿不依赖名称。

理想的是 exec 但隐藏命令窗口...但据我所知这是不可能的...

【问题讨论】:

    标签: javascript windows exec wsh


    【解决方案1】:

    您可以使用 Win32_Process WMI 类启动可执行文件以获取其进程 ID。在此之后,您可以查询 WMI 以判断该进程是否仍在运行。示例:

    var SW_SHOWMINNOACTIVE = 7;
    
    var WMI = GetObject("winmgmts:{impersonationlevel=impersonate}!root/CIMV2");
    
    function processExists(processId) {
      var processColl = new Enumerator(WMI.ExecQuery("select ProcessId " +
        "from Win32_Process where ProcessId=" + processId.toString()));
      return ! processColl.atEnd();
    }
    
    var startInfo = WMI.Get("Win32_ProcessStartup").SpawnInstance_();
    startInfo.ShowWindow = SW_SHOWMINNOACTIVE;
    
    var process = WMI.Get("Win32_Process");
    var method = process.Methods_.Item("Create");
    var inParams = method.InParameters.SpawnInstance_();
    inParams.CommandLine = "cmd.exe";
    inParams.CurrentDirectory = null;
    inParams.ProcessStartupInformation = startInfo;
    
    var outParams = process.ExecMethod_(method.Name, inParams);
    if ( outParams.ReturnValue == 0 ) {
      var processId = outParams.ProcessId;
      WScript.Echo("ProcessId: " + processId.toString());
    } else {
      WScript.Echo("ReturnValue: " + outParams.ReturnValue);
      WScript.Quit(outParams.ReturnValue);
    }
    
    while ( processExists(processId) ) {
      WScript.Echo("Process still running");
      WScript.Sleep(1000);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 2012-05-03
      • 2020-08-06
      相关资源
      最近更新 更多