让javascript运行进程,如果它';它还没有运行

让javascript运行进程,如果它';它还没有运行,javascript,shell,wsh,Javascript,Shell,Wsh,我想让Javascript运行,如果还没有运行cmd.exe 我希望有一种方法可以让javascript查看正在运行的进程,然后如果名称在列表中,就不要运行。但是如果它没有运行进程。Javascript不是编写操作系统级进程控制脚本的最佳途径。如果javascript能够如此直接地访问您的操作系统,那么浏览互联网将是一个极大的安全风险 Internet Explorer确实有一种从javascript编写窗口脚本的机制,但您必须调整安全设置以允许这种情况发生。其他浏览器甚至不提供这种可能性 在安

我想让Javascript运行,如果还没有运行cmd.exe


我希望有一种方法可以让javascript查看正在运行的进程,然后如果名称在列表中,就不要运行。但是如果它没有运行进程。

Javascript不是编写操作系统级进程控制脚本的最佳途径。如果javascript能够如此直接地访问您的操作系统,那么浏览互联网将是一个极大的安全风险

Internet Explorer确实有一种从javascript编写窗口脚本的机制,但您必须调整安全设置以允许这种情况发生。其他浏览器甚至不提供这种可能性

在安全警告中选择“允许阻止的内容”后,此代码将在Internet Explorer中执行notepad.exe:

var shell = new ActiveXObject('WScript.Shell');
shell .Run("notepad.exe");
文件:

因此,如果合适,我们可以使用此方法列出活动流程,并启动一个活动流程:

function startUniqueProcess(process_name, process_path) {
    // 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();
        // split on space
        p = p.split(' ');
        // check for split lines longer than 2
        if (p.length < 2)
            continue;
        // match process_name to this item
        if (p[0] == process_name) {
            // clean up and return false, process already running
            shell = null;
            handle = null;
            return false;
        } // end :: if matching process name
    } // end :: while

    // clean up
    handle = null;

    // process not found, start it
    return shell.Exec(process_path);
}


// example use
var result = startUniqueProcess('notepad.exe', 'notepad.exe');
if (result === false)
    alert('did not start, already open');
else
    alert('should be open');
函数startUniqueProcess(进程名称、进程路径){
//创建shell对象和exec句柄
var shell=newActiveXObject('WScript.shell');
var handle=shell.Exec(“tasklist.exe”);
//循环遍历tasklist.exe的输出
而(!handle.StdOut.AtEndOfStream){
//抓取一行文字
var p=handle.StdOut.ReadLine();
//空间分割
p=p.分割(“”);
//检查长度超过2的分割线
如果(p.长度<2)
继续;
//将进程名称与此项匹配
if(p[0]==进程名称){
//清除并返回false,进程已在运行
shell=null;
handle=null;
返回false;
}//结束::如果匹配进程名称
}//结束::while
//清理
handle=null;
//找不到进程,请启动它
返回shell.Exec(进程路径);
}
//示例使用
var result=startUniqueProcess('notepad.exe','notepad.exe');
如果(结果===false)
警报(“未启动,已打开”);
其他的
警报(“应打开”);

请记住,这是一个概念的证明——在实践中,我不会建议你永远,永远,永远这样做。它是特定于浏览器的、危险的、可利用的,而且通常是不好的做法。Web语言是用于Web应用程序的,javascript不打算成为操作系统脚本语言,不管Microsoft可能想告诉您什么。:)

您可能希望查看JScript.net,或者查看Rhino、ringoJS、nodejs或任何其他服务器端js平台。尽管对于windows来说,JScript.NET和WSH对象模型一样都是最好的:世界上的每一个黑客都希望看到这项工作。JavaScript对shell一无所知。您必须使用ActiveX或其他可怕的东西才能获得操作系统级访问权限,用户必须明确地允许它。而且,这显然不是跨平台的。我不知道为什么人们觉得对另一个开发者说教是可以接受的——如果你不知道或不喜欢某件事,就别管它。如果你想做任何假设,假设OP需要知道他们所问问题的答案。我们几乎没有足够的背景来决定他们所寻求的信息的应用是否合理,坦率地说,我看不出我们的权限是如何根据自己的优点来扮演it知识的版主或守门员。回答问题或不回答。