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