Как запустить программу на сервере через браузер

Обновлено: 07.07.2024

Это внутреннее веб-приложение, где мы хотели бы, чтобы веб-страницы содержали ссылки на несколько утилит, которые Win32 EXE. Мы доверяем бывшим и производим их. (не волнует, если он спрашивает, нормально ли его запускать или сохранять). Я попробовал прямую ссылку (например, C:notepad.exe), который работает только локально. (Это будет доля в сети). Пробовал файл:// / и не работал. IE7-это необходимый браузер.

Как насчет чего-то вроде:

это предполагает, что exe находится где - то вы знаете на компьютере пользователя:

  1. он загружает файл js
  2. в windows: файл js определяет, установлен ли iTunes на компьютере или нет: ищет компонент браузера activeX, если IE, или плагин браузера, если FF
  3. если iTunes установлен, то браузер перенаправляется на URL-адрес с специальный транспорт: itms://.
  4. браузер вызывает обработчик (предоставленный iTunes exe). Это включает в себя запуск exe, если он еще не запущен.
  5. iTunes exe использует остальную часть специального url-адреса для отображения определенной страницы пользователю.

обратите внимание, что exe, при установке, установлены обработчики протокола URL для транспорта "itms" с браузерами.

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

затем вы можете написать html для тестирования

веб-страница будет содержать ссылки с параметрами, которые приведут к открытию программы registerd и любым параметрам, указанным в ссылке, передаваемой ей. Есть хороший описание как это сделать на MSDN

вы говорите, что у вас возникли проблемы с вставкой на веб-страницу ссылки на файл, который имеет .расширением exe?

альтернативой, конечно, является динамическая запись содержимого файла непосредственно в Ответ.Клиенту OutputStream. Так тебе это не понадобится .exe должен быть в вашем docroot, но это не прямая ссылка для загрузки. В этом случае файл может быть загружен нажатием кнопки.

что-то вроде этого:

Response.Clear(); string FullPathFilename = "\\server\share\CorpApp1.exe"; string archiveName= System.IO.Path.GetFileName(FullPathFilename); Response.ContentType = "application/octet-stream"; Response.AddHeader("content-disposition", "filename postinfo clearfix">

вы также можете использовать в JavaScript.

или вы можете зарегистрировать приложение в обрабатывать новый веб-протокол вы можете определить. Это также может быть " выбор приложения" таким образом, каждый раз, когда приложение нажимается, оно будет ссылаться на страницу вашего нового протокола, вся обработка этого протокола затем передается вашему "приложению выбора", которое использует аргументы для поиска и запуска приложения на ПК клиентов.

Запуск на локальном сервере
Здравствуйте, Друзья. Знакомлюсь с HTML. Установил Denwer3 (Ос - Windows7). Создал документ.


Запуск exe на сервере
Подскажите как запустить программу из php скрипта, соответственно передать в нее параметры, и.

запуск программ на сервере
Здаров! Тута мысля пришла, можно ли запускать exe'шники на сервере? Например, плеер. Т.е.

вообще то нет ничего не возможного .

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

то есть сдесь для запуска даже PHP не понадобиться.

по идее. но опять же - это общий случай.
в пхп есть функции запуска внешних программ

ОГРАНИЧЕНИЯ:
- программа должна быть разработана под ось сервера
- должно быть право на выполнение, так как как правило сервер и все скрипты запускаются с правами nobody

и многое другое.

еслиб расписал конкретнее что ты хочешь сделать то и ответил бы конкретнее!

Технология CGI не подходит. Я ее слабо знаю. Суть такая - пользователь обращается на сервер. И по его обращению сервер запускает программу, которая на нем находится. Сервер конфигурирую я сама и даю права на запуск. Вот мне надо написать такой скрипт, который при обращении к странице запускает программу на сервере. Можно на PHP, можно на Borlnd C++ Builder.
Пыталась
void __fastcall TWebModule1::WebModule1waHelloAction(TObject *Sender,
TWebRequest *Request, TWebResponse *Response, bool &Handled)
STARTUPINFO si;
PROCESS_INFORMATION p ;
memset(&si,0, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;

Response->Content = 'Very good';

>
Пишет Very good - но процесс не запускает

вот функции php которые запускают внешние программы

string system(string $command [,int& $return_var])

-выполняет команду и результат ее выполнения выводит в браузер.

string exec(string $command [, list& $array] [, int& $return_var])

-запускает команду, и возвращает последнюю строку ее выходного потока, если задан $array (переменная) , то в нее помещаются все строки выводимые данной командой в выходной поток

string PassThru(string $command [, int& $return_var])

-запускает команду и ее выходной паток выводит в браузер 1 в 1

вот все что есть в ПХП для запуска внешних программ

Все они ждут окончания их исполнения
Все они в общем то связаны с WWW

Хочу, чтобы клик по ссылке запускал указанную по ссылке программу с указанными параметрами. Без всяких вопросов. Клик - и крутится.

Такое сегодня хоть в одном браузере возможно?



А жаль. Вот бы дырище было :)


А что если это оформить в виде веб скрипта, крутящегося на каком-то простеньком сервере? А скрипт уже может запустить все что угодно.

запускай на локальной машинке простенький веб сервер, ссылка на странице пускай ведет на него, во время обработки запроса твой вебсервер пусть уже выполняет программку. Только надо будет повозиться с xauth, что бы вебсервер от своего псевдопользователя смог запускать проги в сессиях обычных юзеров.


>Такое сегодня хоть в одном браузере возможно?



ага, rm -rf? размечтался!


>А что если это оформить в виде веб скрипта, крутящегося на каком-то простеньком сервере?

Слишком геморройно. Коллекция и веб-сервер на одной машине, просмотр и запуск (по NFS) - с другой. Вариант - с сервера делать ssh+exec на другую машину не особо покатит, так как смотреть нужно с разных машин :) Хотя, если определять на ком запускать по IP. Можно, но всё равно геморройно.


Да, в IE2 это работало и было очень удобно для интранета :)


хотя можно заюзать и фишки xul


Под Linux есть ActiveX?

Да поставь винду, и скажи себе "да зато у меня линакс на сервере".

ЗЫ NFS клиент под винду должен быть, сам видел 100 лет назад.

Или можно через хелпер-аппликейшн. Когда браузер сам стартует прогу по типу файла.


> Коллекция и веб-сервер на одной машине, просмотр и запуск (по NFS) - с другой.

Дурацкий вопрос. Как запустить из HTML программу по ссылке? :)

Дурацкий ответ: По клику на ссылке javascript пишет в cookie команду с параметром. А демон (по inotify) парсит файл (sqlite базу) кукисов и исполняет команду.


Почему бы не передать в адресной строке команду с параметром?


Почему бы не передать в адресной строке команду с параметром?

Передать куда/кому? Локальному демону? Можно и так. Можно по-быстрому накостылить скрипт с netcat в качестве сетевого интерфейса.


>Под Linux есть ActiveX?

Но есть Java Plug-in.
Если апплет распространять с сертификатом (подписанный апплет), которому доверяет пользователь, то можно запускать сторонние приложения из апплета, давать апплету такие же права, как локальному приложению.
Но не всякий пользователь захочет/сможет импортировать сертификат для доверенных апплетов в собственное хранилище ключей Java (JKS).


ну это для лохалкоста, так что пойдет


чет я не догоняю. В любом браузере есть возможнсть открытия файлов разных типов (скорее всего MIME) разными прогами. Почему нельзя открывать выполяемые файлы bash'ем, например.

С параметрами думать надо.


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


> Конкретные функции не помню, но идея такова: яваскрипт ведь умеет писать в файлы?


> ну это для лохалкоста, так что пойдет

Для локалхоста можно вообще greasemonkey поставить со всеми правами на локальные файлы.


А если посмотреть в сторону джава-апплета?


А что, в этих ваших линуксах браузеры позволяют запускать файлы? НЕ ВЕ РЮ


Как-то браузеры могут iTunes открывать. Вот в эту сторону нужно и копать.


если правильно скучерявится то могут


Я так понимаю, можно сделать custom protol (exe:// например). Нужно просто ассоциации правильно прописать.


>ЗЫ NFS клиент под винду должен быть, сам видел 100 лет назад.

Угу. Но только даже сегодня нет работающего с русскими именами или со всякими «:» в имени.


Не катит. Мне нужно разное виде запускать в разных плейерах. Скажем, есть такие, которые только vlc корректно показывает. Как из mythtv вызывать vlc или kaffeine? Опять же, мне нужен просмотр деталей о фильма в виде полноценной страницы - с обложкой, сюжетом, ролями. Писать свой плагин? Проще придумать что-то с нормальным браузером. Ну и я так и не добился от mythtv безупречной работы. То с русским проблемы, то тормозит, то глючит.

После установки 1С необходимо убедиться что сервер 1С запущен. Автор обычно запускает сервер вручную. Но если вы уверены что сервер 1С запущен, то этот шаг делать не надо.



1.2. Зарегистрировать кластер 1С


Запустить утилиту администрирования серверов 1С:


В открывшемся окне зарегистрировать новый центральный сервер 1С предприятия:



В появившемся окне ввести сетевое имя компьютера, на котором запущен 1С Сервер (или его IP-адрес):

1.3. Зарегистрировать базу 1С на сервере SQL


Для начала регистрации базы необходимо запустить приложение 1С. В появившемся окне "Запуск 1С:Предприятия" регистрируем новую базу нажатием на кнопку "добавить":

Выбираем "Создание новой информационной базы":

В появившемся окне есть возможность создать базу из шаблона, или создать новую пустую базу (в последствии можно будет загрузить базу, загрузить конфигурацию или создать свою конфигурацию):


Жмем кнопку далее, вводим название базы и тип расположения базы на сервере:

жмем далее и заполняем поля:
При этом необходимо заметить, что поле "Имя базы данных" - это названия базы на SQL сервере. А поле "Имя информационной базы" - название базы на сервере 1С.
После чего выбираем вариант аутентефикации в 1С (Выбирать автоматически) и жмем кнопку "Готово":

1.4. Загрузить или создать конфигурацию 1С

Запустить конфигуратор с базой:


Загрузить ранее выгруженную информационную базу:

2. Настройка IIS на сервере

2.1. Проверка установленных компонент IIS


Для работы веб-клиента 1С:Предприятия необходимы службы IIS, которые небыли установлены по умолчанию при установке Windows 8.1 x64.
Для их установки следует перейти "Пуск - Панель управления - Программы и компоненты - Включение или отключение компонентов Windows". В появившемся дереве, в ветке "Службы IIS – Службы интернета - Компоненты разработки приложений" отметить все компоненты, как показано на рисунке. Затем нажать кнопку "Ок":

2.2. Разрешение 32-разрядных приложений в пуле приложений


Веб-клиент 1С:Предприятия 8.3 является 32-разрядным приложением. Поэтому для 64-разрядной ОС необходимо разрешить работу оных в пуле приложений сервера IIS. Для этого необходимо перейти "Пуск - Панель управления – Администрирование – Диспетчер служб IIS". В диспетчере служб выбрать "Пулы приложений – DefaultAppPool – Дополнительные параметры". В списке дополнительных параметров переменной "Разрешены 32-разрядные приложения" установить значение "True":


Установить значение в True для параметра "Разрешены 32-разрядные приложения":

2.3. Установка удостоверения пула приложений в качестве удостоверения анонимного пользователя

По умолчанию в качестве анонимного пользователя установлен пользователь IUSR, которого нет в системе. Дабы не создавать оного можно просто включить удостоверение пула приложений в качестве удостоверения анонимного пользователя. Для этого необходимо перейти "Пуск - Панель управления – Администрирование – Диспетчер служб IIS". В диспетчере служб перейти в "Проверка подлинности:



На пункте "Анонимная проверка подлинности" вызвав контекстное меню "изменить":

В открывшемся диалоге отметить "Удостоверение пула приложений". Закрыть диалог, нажав кнопку "ОК".


3. Публикация WEB-приложения из 1С

Для публикации приложения необходимо иметь полный доступ на папку проектов IIS. Есть 2 способа публикации приложения из 1С. 1 - сначала создать необходимую папку в каталоге "C:\inetpub\wwwroot\" в нашем случае это папка с названием "Base1C" и дать права текущему пользователю на полный доступ на эту папку. 2 способ зайти в 1С из под администратора а потом дать необходимые права на папку уже опубликованного приложения. В э статье описан второй путь.

3.1. Для публикации конфигурации на сервере IIS необходимо запустить 1С из под администратора:

Вызываем контекстное меню на ярлыке 1С и выбераем "Запуск от имени администратора"




Выбираем базу и запускаем 1С в режиме конфигуратора:



3.2. Запустить публикацию на web-сервере

Для начала публикации переходим в меню "Администрирование - Публикация на веб-сервере":



В появившемся окне указать имя публикации, указать веб-сервер и указать путь на веб-сервере.
1С позволяет публиковать на любой доступный веб-сервер в сети с помощью утиллиты webinst. В статье использовался пример публикации на локальный компьютер:

Более подробную информацию по пунктам в окне публикации можно получить из 1С конфигуратора нажав на кнопку F1.

4. Настройка библиотек для работы в 64-х разрядной ОС

После публикации на веб-сервере из конфигуратора, в случае использования 64-х разрядной операционной системы на компьютере который используется в качестве сервера IIS, необходимо настроить работу с библиотеками 1С. Это делается каждый раз после публикации на веб-сервере.

Для настройки библиотек необходимо выполнить следующие действия.
Открываем через Панель Управления - Администрирование Диспетчер служб IIS.
В открывшемся окне раскрываем группу "Сайты" и наш сайт (в примере Base1C).
Нажимаем на "Сопоставление обработчиков" в группе IIS:

В открывшемся окне ищем строку с именем "ISAPI-dll" и нажимаем пункт меню в действиях "Добавить сопоставление сценария. "

В открытом окне "Добавление сопоставления сценария" в поле "Путь запроса" ввести символ * (звездочка, т.е. все). В поле "Исполняемый файл" выбрать библиотеку wsisapi.dll с каталога установленной 32-х разрядной версии 1С. В поле "Имя" можно задать любое имя (в примере Имя = 1С):


Некоторые специалисты в других статьях указывают что надо отключить ограничение сопоставления запроса. Автор не нашел зависимости работы этой отметки для программы 1С. Данная информация приводиться информативно, может быть кому то понадобиться.
Настроить ограничения запроса можно нажав на кнопку "Ограничение запроса" в окне Добавление сопоставления сценария. В открывшемся окне убрать отметку с "Вызывать обработчик только при сопоставлении запроса с:":


Нажать кнопку Ok.
На появившейся вопрос ответить "Да":

После чего необходимо перезапустить службу IIS. Для этого необходимо перейти в корень панели "Подключения" (на название сервера) и в меню действия справа выбрать "Перезапустить":


После чего можем проверить, работает ли подключенная библиотека. Для этого переходим в "Ограничения ISAPI и CGI":


И посмотреть, есть ли ссылки для необходимых обработчиков (dll):

Еще раз следует отметить, что данную процедуру настройки библиотек следует делать каждый раз после публикации приложения из 1С.

5. Настройка прав доступа на папки и Брандмауэра Windows

5.1. Настройка доступов к папкам

Для правильной работы всех пользователей, а не только администраторов с опубликованным веб-приложениям необходимо настроить некоторые права на папки.
Для настройки прав на пакпи необходимо в проводнике Windows вызвать контекстное меню для необходимой папки и выбрать в контекстном меню пункт "Свойства" и перейти на закладку "Безопасность"


В данном случае речь идет о правах на 3 папки:
1. "C:\Program Files (x86)\1cv8\8.3.5.1088\bin\" (в этой папке находится библиотека wsisapi.dll) (номер релиза "8.3.5.1088" может быть другой)
2. C:\inetpub\wwwroot\Base1C (это созданная нами папка которая будет использоваться для доступа из интернет)
3. КаталогБазы (это база 1С, если используется файловый тип базы), в нашем примере база храниться на SQL сервере, поэтому каталога базы нет и доступа на него давать не надо.
Для всех папок (Пункты: 1,2,3) необходимо для пользователя IIS_IUSRS установить доступ "Полный доступ":

Для папки с нашей базой (Пункт 3) данных для пользователя Users, установить доступ "Изменение".

5.2. Настройка доступов к портам в Брандмауэре Windows

Если планируется использовать web-доступ не только локально, то необходимо настроить Брандмауэр Windows для доступа с внешних ресурсов, указав порт доступа 80. Автор не использовал настроек брандмауэра, а просто отключил его:

Читайте также: