如何在客户端运行程序或批处理文件?

时间:2009-05-18 13:36:54

标签: javascript batch-file executable client-side

如何在客户端运行批处理文件?一个exe文件?只是在客户端打开预装程序?

[编辑]

关于ActiveX,我试过

    var activeXObj = new ActiveXObject("Shell.Application");
    activeXObj.ShellExecute("C:\\WINDOWS\\NOTEPAD.EXE", "", "", "open", "1");

但这不起作用。有什么建议吗?

8 个答案:

答案 0 :(得分:37)

来自Javascript?你不能。这是一个安全风险。想一想 - 您希望每个网站都能在您的PC上运行程序吗?

答案 1 :(得分:11)

您是指使用JavaScript通过浏览器窗口启动外部程序?你无法做到这一点!那是一个该死的安全黑洞!

答案 2 :(得分:8)

<script language="javascript" type="text/javascript">

    function RunEXE(prog) {
        var oShell = new ActiveXObject("WScript.Shell");
        oShell.Run('"' + prog + '"', 1);
    }     
</script>

答案 3 :(得分:6)

如果你真的掌握了客户端,那么你可能想在客户端安装一些远程守护进程服务,比如SSH。

PS。但是,通过“服务器代码”调用它。

更新:

不要气馁。你绝对可以安全地做到这一点。

  1. 首先,您需要在客户端上提供一个守护程序服务,该服务将处理调用您的应用程序的任务。就个人而言,我宁愿使用C ++或Delphi构建简单的rpc-server作为windows-service;但许多其他类型的服务器也可以完成这项工作(SSH,Apache,Telnet)

  2. 然后制作一个网页,允许用户通过适当的身份验证“注册”他们的服务以调用该服务(密码,安全密钥)

  3. 如果要在已注册的客户端上从网页调用应用程序,请对服务器进行ajax调用(xmlhttprequest)。

  4. 服务器应使用注册信息验证请求的IP地址。

  5. 然后使用注册信息向客户端发出远程命令调用。

  6. 可能存在一些网络情况,该方案可能无效。但是,如果您真的可以控制执行环境,那么总会有一些解决方法。

答案 4 :(得分:5)

将客户端重定向到http://yourserver/batchfile.bat。在某些浏览器中,这将提示用户运行批处理文件。

答案 5 :(得分:3)

如果问题是浏览器中显示批处理文件,则需要在HTTP标头中设置Content-TypeContent-Disposition,以提示用户保存(或运行)文件而不是让浏览器显示它。

如果没有来自用户的确定,您将无法运行该文件,但这应该不是问题。

Have a look at this question for a little more detail.

答案 6 :(得分:0)

基本上,你不能。如果你需要在客户端启动一些东西,你需要另外一个机制,大概是一个内置了一些安全性的机制。之前的海报提到了psexec(http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx),这显然只有你拥有适当的权限才能工作在目标系统上,它完全在浏览器之外。

基本上,如果你能够轻松地做到这一点,你所要求的是一个很大的问题。

您可能会查看ActiveX,但我不知道这些天ActiveX对象有什么限制(我知道有限制,但也许您可以在其中工作)。

答案 7 :(得分:0)

出于安全原因,不允许直接使用。除了所有其他答案之外,还有一个想法。

您可以在预安装的程序中构建一个本地主机休息服务,并使用javascript通过命令或数据调用它,并且假设您编写了预安装的程序并且该服务应该在您调用时运行。此解决方案适用于某些场景。