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

How can I run a program or batch file on the client side?

提问人:Ahmed Atia 提问时间:5/18/2009 最后编辑:T.J. CrowderAhmed Atia 更新时间:12/12/2021 访问量:71259

问:

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

[编辑]

关于ActiveX,我试过

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

但这行不通。有什么建议吗?

JavaScript 批处理 可执行文件 客户端

评论

4赞 Joel Coehoorn 5/18/2009
这是不可能的 - javascript 是专门设计的,不允许这样做,因为这将是一个巨大的安全漏洞。无论是否必需,你都做不到。
0赞 Andomar 5/18/2009
永不言败,永不:)预安装的程序可以安装允许从 JavaScript 启动它的 ActiveX 控件。(免责声明:这将是令人讨厌的,而且维护成本非常高,我不提倡你真的尝试这个)
0赞 cgp 5/18/2009
你的意思是,你实际上是在向 SO 索要一个浏览器漏洞?这就是这个问题的意义所在。我不确定它是否是您的预装应用程序。有些事情我们不应该愿意在 SO 上提供帮助。我不认为你真的明白这就是你所要求的。
1赞 Michael Kohne 5/19/2009
我想也许我们需要在这一点上问——你到底想做什么?您想在客户端上完成什么,您想从浏览器执行哪些操作?换句话说,为什么?
2赞 Trylks 1/20/2014
为什么不告诉用户下载批处理文件并执行它?你可以用 html 来做到这一点,而不需要 javascript。

答:

39赞 pjc50 5/18/2009 #1

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

评论

0赞 Ahmed Atia 5/18/2009
我知道这是一个安全风险,但这是在客户端上运行预安装程序并来自 Javascript 的迫切要求?
0赞 Andomar 5/18/2009
例如,您可以使用批处理文件来还原 Intranet 站点上的驱动器映射
0赞 pjc50 5/18/2009
您可以使用 Microsoft ClickOnce 实现此目的(不可靠,需要 IE 和 .NET 应用程序) 请提供更多上下文:此网页在哪里?应用是什么?
12赞 Matt G 5/18/2009
PJC50 的意思不是“安全风险”,而是浏览器不允许的“安全风险”。
11赞 DreamSonic 5/18/2009 #2

您的意思是使用 JavaScript 通过浏览器窗口启动外部程序?你不可能那样做!那真是该死的安全黑洞!

评论

0赞 Anderson Green 1/6/2022
这实际上是可能的:在 Windows 上,您可以使用自定义 URL 协议从浏览器窗口启动外部程序。
5赞 Andomar 5/18/2009 #3

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

评论

0赞 Ahmed Atia 5/18/2009
您的服务器/batchfile.bat是服务器端,要执行的文件是客户端?
0赞 Andomar 5/18/2009
如果用户选择“运行”,它会将批处理文件下载到 PC,并在那里执行它。
0赞 belgariontheking 5/18/2009
@Ahmed:他的建议是,你引导浏览器下载.bat文件,并让用户执行它。
0赞 TheBlastOne 9/14/2011
@Ahmed,...batchfile 可以很好地引用本地安装的东西。
3赞 David Webb 5/18/2009 #4

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

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

看看这个问题,了解更多细节。

0赞 Michael Kohne 5/18/2009 #5

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

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

你可能会研究ActiveX,但我不知道现在ActiveX对象有什么限制(我知道有限制,但也许你可以在其中工作)。

评论

0赞 Andomar 5/18/2009
所以。。。JavaScript 要求服务器运行 psexec 以在客户端上启动程序?我猜会起作用。
0赞 Michael Kohne 5/19/2009
是的。同样,仅当服务器以对客户端具有适当权限的用户身份运行时,这才有效。
6赞 Sake 5/18/2009 #6

如果你真的对客户端有控制权,那么你可能希望在客户端安装一些远程守护程序服务,比如 SSH。

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

更新:

不要气馁。您绝对可以以安全的方式做到这一点。

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

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

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

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

  5. 然后使用注册信息对客户端进行远程命令调用。

在某些网络情况下,此方案可能不起作用。但是,如果您确实可以控制执行环境,那么总会有一些解决方法。

评论

0赞 Ahmed Atia 5/18/2009
但是如何从网页/ javascript中做到这一点呢?
0赞 Sake 5/18/2009
对服务器进行 ajax 调用。
0赞 bambams 1/24/2015
这仍然是一个可怕的解决方案,但它是如此滑稽有趣,以至于它很棒。从理论上讲,这是可以做到的,并且是“安全的”,假设您可以信任服务器对客户端进行 SSH 访问。它只适用于 Intranet 设置,实际上它永远不会是一个实用的好解决方案,但它很棒,而且没有浏览器插件(例如,Flash、Silverlight、Java 小程序)!确实需要太多的配置才能使它可供甚至要求这样做的白痴用户使用。
1赞 jagapathi 2/28/2019
终于有人在这里说得通了。所有的答案都是。这已经过时了。筛子谢谢伙计
10赞 sri 5/3/2011 #7
<script language="javascript" type="text/javascript">

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

评论

1赞 Yuriy N. 2/23/2016
上述解决方案仅适用于IE,需要用户权限才能运行ActiveX,但它有效!
0赞 frank 7/3/2021 #8

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

您可以在预安装的程序中构建一个 localhost rest 服务,并使用 javascript 通过命令或数据调用它,前提是您编写了预安装的程序,并且该服务应该在您调用时运行。此解决方案适用于某些方案。