Как запустить программу или пакетный файл на стороне клиента?
Как запустить пакетный файл на стороне клиента? EXE-файл? Просто открыть предустановленную программу на стороне клиента?
[Edit]
Что касается ActiveX, я попробовал
var activeXObj = new ActiveXObject("Shell.Application");
activeXObj.ShellExecute("C:WINDOWSNOTEPAD.EXE", "", "", "open", "1");
но это не сработает. Есть предложения?
7 ответов
Из Javascript? Ты не можешь. Это риск для безопасности. Подумайте об этом - вы хотите, чтобы каждый веб-сайт мог запускать программы на вашем компьютере?
вы имеете в виду запуск внешней программы через окно браузера с помощью JavaScript? Ты не можешь этого сделать! Это чертова черная дыра безопасности!
<script language="javascript" type="text/javascript">
function RunEXE(prog) {
var oShell = new ActiveXObject("WScript.Shell");
oShell.Run('"' + prog + '"', 1);
}
</script>
Если у вас действительно есть контроль над клиентом, вы можете установить некоторую удаленную службу демона на стороне клиента, например SSH.
PS. Однако вызовите его через свой "сервер-код".
обновление:
Не расстраивайтесь. Вы можете сделать это абсолютно безопасным способом.
сначала вам нужна служба демона на клиенте, которая будет обрабатывать задачу вызова вашего приложения. Лично я бы предпочел построить простой rpc-сервер как windows-сервис с C++ или Delphi; но многие другие типы серверов также могут выполнять эту работу (SSH, Apache, Telnet)
затем сделайте веб-страницы, которые позволяют пользователю "регистрировать" свои службы с надлежащей аутентификацией, чтобы вызвать эту службу (пароль, ключ безопасности)
Если вы хотите вызвать свое приложение с веб-страницы на уже зарегистрированном клиенте, сделайте ajax-вызов (xmlhttprequest) на свой сервер.
сервер должен проверить, запросив IP-адрес с зарегистрированной информацией.
затем сделайте удаленный вызов команды клиенту с зарегистрированной информацией.
может быть какая-то сетевая ситуация, что эта схема может не работать. Однако, если у вас действительно есть контроль над средой выполнения, всегда есть некоторые обходные пути.
Если проблема в том, что пакетный файл отображается в браузере, вам нужно установить Content-Type
и Content-Disposition
в заголовке HTTP, поэтому пользователю предлагается сохранить (или запустить) файл, а не отображать его в браузере.
вы не сможете запустить файл без согласия пользователя, но это не должно быть проблемой.
посмотрите на этот вопрос для немного более подробной информации.
в принципе, вы не можете. Если вам нужно запустить что-то на стороне клиента, вам понадобится другой механизм, предположительно со встроенной безопасностью. Предыдущий плакат упомянул psexec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx), который, очевидно, будет работать только в том случае, если у вас есть соответствующие разрешения на целевую систему и который полностью находится вне браузера.
в принципе, то, что вы просите, - это большая, большая проблема, если вы легко справились.
вы можете посмотреть ActiveX, но я не знаю, какие ограничения существуют на объекте ActiveX в эти дни (я знаю, что есть ограничения, но, возможно, вы можете работать в них).