WshShell运行不等待,但执行状态更新(运行vs执行问题)
WshShell Run Without Waiting But Exec for Status Update (run vs exec issue)
在Windows环境下通过JS启动一个脚本。
我需要两件东西:
- 没有弹出窗口。
shell.run(cmd, 0)
) - 我不能等待线程完成。
shell.exec()
或shell.run(cmd, 0, false)
)
我该怎么做?这些似乎是相互排斥的。我不能等待它完成,但我会投票它的状态,看看它什么时候完成。显然,exec更适合于此,因为它包含状态等…虽然我需要取消弹出命令窗口,因为在这个系统中可能有很多。
有谁知道我能做什么吗?无论如何,我将轮询,但没有等待进程完成,运行将立即返回0,我不知道它是否已经完成,而不是试图在进程列表中找到图像名称…但是我不喜欢在没有PID的情况下这样做,我宁愿不依赖于名称。理想的是执行,但隐藏命令窗口…
您可以使用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);
}
相关文章:
- setInteval vs setTimeout
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- $(this).prop('property') vs. this.property
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何根据时间运行不同的脚本
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- VS 12 在 IE11P 中显示新的 JavaScript 运行时错误
- 在 childView 中直接运行函数 VS 在其模型上触发事件 [ 在 BackBone 中]
- AngularJS:使用$timeout在摘要循环后运行(Safari vs chrome)
- 只有在VS 2010中调试时才出现JS运行时错误
- WshShell运行不等待,但执行状态更新(运行vs执行问题)
- 运行更少的服务器端vs客户端
- 结构在2d数组上先运行x vs先运行y
- 使用require('babel/register') vs.在运行前编译代码
- 如何在vs 2010中为dbpedia运行sparql查询以获得抽象