如何使用Javascript获取正在运行的进程?

8

我想知道是否可以在网页浏览器(最可能是IE)中使用JavaScript来检索当前运行的进程列表?

我不打算启动或关闭任何进程之类的操作,只是需要一个列表,通过查看它然后判断某个特定的进程是否正在运行,如果是,则执行其他操作。


你想查看操作系统进程列表吗? - Wojciech Bednarski
2
你是指在计算机上运行的进程吗?如果是,那么答案是否定的。JS无法访问浏览器外部的任何内容。也许你可以通过ActiveX插件做一些奇怪的事情,但我不清楚。 - Flambino
请参阅https://dev59.com/UVnUa4cB1Zd3GeqPcKCQ,以获取有关运行JavaScript进程的更多信息。 - Julien Kronegg
4个回答

7

不,你不能从运行在普通权限下的基于浏览器的JavaScript中获取有关操作系统进程的任何信息。

出于隐私和安全原因,浏览器JavaScript环境受到非常仔细的保护和隔离。如果可以做到你刚才所要求的,那么互联网上的任何网页都可以看到你正在运行哪些程序,并将该信息发送回他们自己的服务器。

如果你愿意放松安全设置,某些版本的IE包含一些访问操作系统信息的能力(例如请参见此处),但你应该意识到,如果你放松安全设置,那么未知的网页也可能能够访问这些信息或在你的操作系统中执行操作。其他浏览器甚至不包含常规网页的此功能。由于只有一个浏览器支持此功能,而且只有在安全限制放宽时才支持,因此这绝不是一种通用的浏览器功能。


1
有什么变化了吗?[Discord - 游戏检测] (https://support.discordapp.com/hc/en-us/articles/217960107-Games-Detection-101) - Kcvin
@Kcvin - 那个链接与这个问题有什么关系? - jfriend00
Discord通过Web浏览器可以根据正在运行的.exe文件检测您正在玩什么游戏。我会认为它是JS?我不确定是否给予任何特殊权限。 - Kcvin
@Kcvin - Discord是什么?请提供链接。 - jfriend00
1
这是一个基于浏览器的聊天应用程序,可以根据正在运行的进程告诉您朋友正在玩哪些游戏--无需下载,但他们有安装桌面版本的选项;https://discordapp.com/ - Kcvin
@Kcvin - 嗯,没有办法在普通浏览器权限下知道您本地计算机上正在运行的进程。想象一下广告公司、间谍软件公司或恶意人士如果能够从普通网页中获取您计算机上正在运行的所有信息会做什么。当我在Chrome中尝试使用仅浏览器版本的Discord时,我没有看到任何此类信息可用。 - jfriend00

4
Here is JSP page-

<html>
<head>
<title>Find running processes</title>
<script type="text/jscript">
function getProcessList()
{
  var procs = GetObject("WinMgmts:").InstancesOf("Win32_Process");
  var mainRes = "";
  procEnum = new Enumerator(procs);
  for ( ; !procEnum.atEnd(); procEnum.moveNext())
  {
    var proc = procEnum.item();   
    mainRes += proc.Name + ": " + proc.ProcessID + "\n";
  } 
  return mainRes;
}

function getSysRunningApps()
{
  var oOutput = document.getElementById("processDisplay");
  oOutput.value = "";
  oOutput.value = getProcessList();
}

</script>
</head>

<body bgcolor="#FFFFFF">
<input type="button" value="Show Processes" onclick="getSysRunningApps();"><br>
<p id="processDisplay" cols="30" rows="40"></p>
</body>
</html>

自MSIE 9起,标准模式下不支持GetObject VB函数(http://msdn.microsoft.com/en-us/library/ie/7tf9xwsc%28v=vs.94%29.aspx)。您需要使用Quirks模式... - Julien Kronegg

2

是的,你可以!下面的方法只针对MSIE浏览器,并且可能会引发安全警告。

在MSIE浏览器中执行以下代码,可以在浏览器窗口中列出所有Windows进程,并在McAfee运行时显示javascript警报:

<html>
  <body>
    <div id="list"></div>
  </body>
  <script>
    // create a shell object and exec handle
    var shell = new ActiveXObject('WScript.Shell');
    var handle = shell.Exec("tasklist.exe");

    // loop through the output of tasklist.exe
    while (!handle.StdOut.AtEndOfStream) {
      // grab a line of text
      var p = handle.StdOut.ReadLine();
      document.getElementById("list").innerHTML+=p+"<br>"; // for debugging
      // split on space
      p = p.split(' ');
      if (p[0]=='mcshield.exe') {
        alert("McAfee detected");
      }
    } // end :: while

    // clean up
    handle = null;
    shell=null;
</script>
</html>

来源:灵感来自https://dev59.com/UVnUa4cB1Zd3GeqPcKCQ#6834585

此代码已在以下浏览器中测试通过:

  • MSIE 8.0.6001.18702 / Windows XP Pro
  • MSIE 10.0.9200.16521 / Windows 7;标准文档模式
  • MSIE 11.0.9600.16428 / Windows 7;Edge(又名 MSIE11)文档模式

如果在创建 ActiveXObject 时出现 JavaScript 错误 Automation server can't create object,则可能需要将 MSIE 的安全选项 Initialize and script ActiveX controls not marked as safe for scripting 设置为 PromptEnable

在 Firefox 下,您应该使用基于XPCOM 的 nsIProcess的东西。 请注意,tasklist.exe 在所有 Windows 版本下都不可用:据我所知,它从 Windows XP Pro 开始提供。


我在Windows 8上的IE 11中无法让您的代码在这里正常工作:http://jsfiddle.net/jfriend00/fR4dv/。 - jfriend00
@jfriend00:非常抱歉,我没有Windows 8,但我在MSIE 11和Windows 7下测试了它,它可以工作。你的Windows目录中是否有 tasklist.exe?(通常情况下,它在 %windir%\system32\tasklist.exe 下面) - Julien Kronegg
是的,我在 \windows\system32 目录和我的路径中有 tasklist.exe。它可以在 DOS shell 中正常运行。 - jfriend00
@jfriend00:您是否遇到了一些JavaScript错误?您的MSIE安全设置是否已正确配置?(例如,“初始化和未标记为安全脚本的ActiveX控件”=“提示”) - Julien Kronegg
在控制台中,它显示:“SCRIPT429:自动化服务器无法创建对象”。我不会花更多时间调试它,因为我永远不会让任意脚本在我的计算机上运行程序,也不会建议我认识的任何人允许这样做。它不能在Windows 8上的IE11默认安全设置下工作,我也不想调整IE的安全设置以允许它。谢天谢地,我通常不运行IE,所以我不必担心被这种访问欺骗。 - jfriend00

2
绝对不行,这已经远超Javascript沙盒的能力范围了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接