Как я могу запустить программу или командный файл на стороне клиента? - PullRequest
6 голосов
/ 18 мая 2009

Как запустить командный файл на стороне клиента? EXE-файл? Просто открыть предустановленную программу на стороне клиента?

[Изменить]

По поводу ActiveX я пробовал

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

но это не работает. Есть предложения?

Ответы [ 7 ]

36 голосов
/ 18 мая 2009

Из JavaScript? Ты не можешь Это риск для безопасности. Подумайте об этом - хотели бы вы, чтобы каждый веб-сайт мог запускать программы на вашем ПК?

11 голосов
/ 18 мая 2009

Вы имеете в виду запускать внешнюю программу через окно браузера, используя JavaScript? Вы никак не можете это сделать! Это чертова дыра в безопасности!

8 голосов
/ 03 мая 2011
<script language="javascript" type="text/javascript">

    function RunEXE(prog) {
        var oShell = new ActiveXObject("WScript.Shell");
        oShell.Run('"' + prog + '"', 1);
    }     
</script>
6 голосов
/ 18 мая 2009

Если у вас действительно есть контроль над клиентом, вы можете установить на стороне клиента некоторую удаленную службу демона, например, SSH.

PS. Однако вызовите его через ваш «код сервера».

Обновлен:

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

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

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

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

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

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

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

5 голосов
/ 18 мая 2009

Перенаправить клиента на http://yourserver/batchfile.bat. В некоторых браузерах это будет предлагать пользователю запустить пакетный файл.

3 голосов
/ 18 мая 2009

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

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

Посмотрите на этот вопрос немного подробнее.

0 голосов
/ 18 мая 2009

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

По сути, вы запрашиваете БОЛЬШУЮ, БОЛЬШУЮ проблему, если вам было легко это сделать.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...