Как запустить программу или пакетный файл на стороне клиента?

Как запустить пакетный файл на стороне клиента? 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. Однако вызовите его через свой "сервер-код".

обновление:

Не расстраивайтесь. Вы можете сделать это абсолютно безопасным способом.

  1. сначала вам нужна служба демона на клиенте, которая будет обрабатывать задачу вызова вашего приложения. Лично я бы предпочел построить простой rpc-сервер как windows-сервис с C++ или Delphi; но многие другие типы серверов также могут выполнять эту работу (SSH, Apache, Telnet)

  2. затем сделайте веб-страницы, которые позволяют пользователю "регистрировать" свои службы с надлежащей аутентификацией, чтобы вызвать эту службу (пароль, ключ безопасности)

  3. Если вы хотите вызвать свое приложение с веб-страницы на уже зарегистрированном клиенте, сделайте ajax-вызов (xmlhttprequest) на свой сервер.

  4. сервер должен проверить, запросив IP-адрес с зарегистрированной информацией.

  5. затем сделайте удаленный вызов команды клиенту с зарегистрированной информацией.

может быть какая-то сетевая ситуация, что эта схема может не работать. Однако, если у вас действительно есть контроль над средой выполнения, всегда есть некоторые обходные пути.


Если проблема в том, что пакетный файл отображается в браузере, вам нужно установить Content-Type и Content-Disposition в заголовке HTTP, поэтому пользователю предлагается сохранить (или запустить) файл, а не отображать его в браузере.

вы не сможете запустить файл без согласия пользователя, но это не должно быть проблемой.

посмотрите на этот вопрос для немного более подробной информации.


в принципе, вы не можете. Если вам нужно запустить что-то на стороне клиента, вам понадобится другой механизм, предположительно со встроенной безопасностью. Предыдущий плакат упомянул psexec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx), который, очевидно, будет работать только в том случае, если у вас есть соответствующие разрешения на целевую систему и который полностью находится вне браузера.

в принципе, то, что вы просите, - это большая, большая проблема, если вы легко справились.

вы можете посмотреть ActiveX, но я не знаю, какие ограничения существуют на объекте ActiveX в эти дни (я знаю, что есть ограничения, но, возможно, вы можете работать в них).