提问人:Ahmed Atia 提问时间:5/18/2009 最后编辑:T.J. CrowderAhmed Atia 更新时间:12/12/2021 访问量:71259
如何在客户端运行程序或批处理文件?
How can I run a program or batch file on the client side?
问:
如何在客户端运行批处理文件?exe文件?只是为了在客户端打开预装程序?
[编辑]
关于ActiveX,我试过
var activeXObj = new ActiveXObject("Shell.Application");
activeXObj.ShellExecute("C:\\WINDOWS\\NOTEPAD.EXE", "", "", "open", "1");
但这行不通。有什么建议吗?
答:
来自 Javascript?你不能。这是一个安全风险。想一想 - 您是否希望每个网站都能够在您的 PC 上运行程序?
评论
您的意思是使用 JavaScript 通过浏览器窗口启动外部程序?你不可能那样做!那真是该死的安全黑洞!
评论
将客户端重定向到 http://yourserver/batchfile.bat。在某些浏览器下,这将提示用户运行批处理文件。
评论
如果问题是批处理文件显示在您需要设置的浏览器中,则显示在 HTTP 标头中,以便提示用户保存(或运行)文件,而不是让浏览器显示它。Content-Type
Content-Disposition
如果没有用户的同意,您将无法运行该文件,但这应该不是问题。
基本上,你不能。如果你需要在客户端启动一些东西,你将完全需要另一种机制,大概是一种内置了一些安全性的机制。之前的海报提到了 psexec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx),它显然只有在您对目标系统具有适当的权限时才能工作,并且完全在浏览器之外。
基本上,如果你能够轻松做到,你要求的是一个很大的问题。
你可能会研究ActiveX,但我不知道现在ActiveX对象有什么限制(我知道有限制,但也许你可以在其中工作)。
评论
如果你真的对客户端有控制权,那么你可能希望在客户端安装一些远程守护程序服务,比如 SSH。
但是,请通过您的“服务器代码”调用它。
更新:
不要气馁。您绝对可以以安全的方式做到这一点。
首先,您需要在客户端上提供守护程序服务,以处理调用应用程序的任务。就个人而言,我宁愿使用 C++ 或 Delphi 构建简单的 rpc-server 作为 Windows 服务;但许多其他类型的服务器也可以完成这项工作(SSH、Apache、Telnet)
然后制作一个网页,允许用户使用适当的身份验证“注册”他们的服务以调用该服务(密码、安全密钥)
如果要从已注册的客户端上的网页调用应用程序,请对服务器进行 ajax 调用 (xmlhttprequest)。
服务器应使用注册信息验证请求的 IP 地址。
然后使用注册信息对客户端进行远程命令调用。
在某些网络情况下,此方案可能不起作用。但是,如果您确实可以控制执行环境,那么总会有一些解决方法。
评论
<script language="javascript" type="text/javascript">
function RunEXE(prog) {
var oShell = new ActiveXObject("WScript.Shell");
oShell.Run('"' + prog + '"', 1);
}
</script>
评论
出于安全原因,不允许直接使用。除了所有其他答案之外,还有另一个想法。
您可以在预安装的程序中构建一个 localhost rest 服务,并使用 javascript 通过命令或数据调用它,前提是您编写了预安装的程序,并且该服务应该在您调用时运行。此解决方案适用于某些方案。
评论