Страница 1 из 1

Запуск внешнего приложения

Добавлено: 31 мар 2008, 17:01
Serega_E
Помогите пожалуйста кто знает как это сделать. Я создаю тестовую систему и мне нужно чтобы она могла запускать на стороне клиента .exe файл. Пробовал следующий код:

<?php
exec("dir C:\\Lang\\TP\\run.bat");
?>

Выдается сообщение:
Warning: exec() [function.exec]: Unable to fork [dir C:\Lang\TP\run.bat] in C:\Inetpub\wwwroot\start.php on line 2

Еще пробовал с помощью JavaScript вот так:

<html>
<script language="JavaScript">
<!--
var activex = new ActiveXObject("WScript.Shell");
activex.Run("C:\\Lang\\TP\\run.bat");
//-->
</script>
<html>

Работает только если запускаю просто как HTML страницу. Если пытаюсь запустить как PHP страницу то выдается сообщение:

Line:6
Char:1
Code:0
Error:Невозможно создание объекта сервером программирования объектов
URL:http://localhost/run.php

ЧТО ДЕЛАТЬ? Заранее благодарю.

Re: Запуск внешнего приложения

Добавлено: 31 мар 2008, 18:21
Oscar
exec - выполняется исключительно на стороне сервера,
но скорей всего таки выполняется! И сообщение, которое выводится - это всего лишь предупреждение. Как с ним справиться - читать, например, тут (первая ссылка гугля, сам не проверял)

activeX - правильное решение, если ограничиваться клиентскими Windows-машинами

А не работает оно у тебя не из-за разницы PHP-HTML, а из-за разницы клиент-сервер.

Скорей всего у тебя сервер на твоём же компьютере и ты этого просто не чувствуешь, а просто открываешь HTML напрямую браузером, а PHP - через localhost. Попробуй HTML через локалхост (а ещё лучше на реальном сервере) - результат должен быть тот же.

А причина ошибки заключается в правах на запуск ActiveX на компьютере клиента.
Как правило ИЕ настроен так, чтобы какой-нибудь умник не повесил на своей странице скрипт, перегружающий комп, типа:

activex.Run("shutdown");


Что делать?

Если тебе это надо локально - добавь в своём ИЕ http://localhost в "Надёжные узлы", если не поможет - читай Предотвращение выполнения данных от Майкрософта, а так же гугль по точной фразе ошибки.

Если же надо, чтобы файл выполнялся на любой клиентской машине - то наверное потребуется какая-нибудь (чуть ли не майкрософтовская) сертификация.

Re: Запуск внешнего приложения

Добавлено: 31 мар 2008, 22:24
Serega_E
Oscar писал(а):exec - выполняется исключительно на стороне сервера,
но скорей всего таки выполняется! И сообщение, которое выводится - это всего лишь предупреждение. Как с ним справиться - читать, например, тут (первая ссылка гугля, сам не проверял)

activeX - правильное решение, если ограничиваться клиентскими Windows-машинами

А не работает оно у тебя не из-за разницы PHP-HTML, а из-за разницы клиент-сервер.

Скорей всего у тебя сервер на твоём же компьютере и ты этого просто не чувствуешь, а просто открываешь HTML напрямую браузером, а PHP - через localhost. Попробуй HTML через локалхост (а ещё лучше на реальном сервере) - результат должен быть тот же.

А причина ошибки заключается в правах на запуск ActiveX на компьютере клиента.
Как правило ИЕ настроен так, чтобы какой-нибудь умник не повесил на своей странице скрипт, перегружающий комп, типа:

activex.Run("shutdown");


Что делать?

Если тебе это надо локально - добавь в своём ИЕ http://localhost в "Надёжные узлы", если не поможет - читай Предотвращение выполнения данных от Майкрософта, а так же гугль по точной фразе ошибки.

Если же надо, чтобы файл выполнялся на любой клиентской машине - то наверное потребуется какая-нибудь (чуть ли не майкрософтовская) сертификация.
Огромное спасибо, на половину моих вопросов я нашел ответы в твоих советах. У меня 2 компьютера. На одном расположен сервер IIS и PHP а другой я использую как клиентскую машину. Отредактировал список надежных узлов и местной интрасети на компьютере с сервером и на клиентском. На компьютере с сервером как ты и обещал все заработало. Запускаю чрез localhost PHP файл в котором через include() подключаю скрипт запускающий внешнее приложение и все прекрасно. Но как ты и обещал на клинтской машине по прежнему весит это сообщение:

Невозможно создание объекта сервером программировния.

А ведь по задумке мне и надо как раз чтобы этот скрипт выполнялся на группе клиентских машин на которых пользователи будут проходитьт тест. Тем не менее ты мне очень помог. Спасибо! ;)