Получение вывода из приложения Windows с использованием PHP - PullRequest
0 голосов
/ 11 мая 2009

У моего босса есть приложение для Windows, которое он написал. Это не консольное приложение Windows, а приложение с графическим интерфейсом Windows. У нас, конечно, есть исходный код, но он не хочет, чтобы это было консольное приложение. Он хочет, чтобы оно оставалось обычным приложением с графическим интерфейсом.

Дело в том, что он хочет иметь возможность вызывать его из PHP, передавая ему параметры, и заставить приложение возвращать информацию в вызывающий PHP-скрипт. Я могу легко вызывать консольные приложения Windows и читать вывод. Я даже могу вызывать VBS-скрипты и получать от них вывод.

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

Кто-нибудь был в состоянии сделать это? Если да, то как?

Заранее спасибо.

Amy


Редактирование, чтобы добавить: Очевидно, босс вставил этот код в свое приложение:

BOOL bConsole = AllocConsole();
 HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
 DWORD dwCharsWritten = 0;
 string sS3Path = sCommandLine.substr(sCommandLine.find("S3://") + 5);
 string sMessage = "S3 Path: " + sS3Path;

 BOOL bWritten = WriteConsole(hOutput, sMessage.c_str(), sMessage.size(), &dwCharsWritten, NULL);

Но php не видит информацию, которую он записывает на эту консоль. Мы пробовали exec и shell_exec безрезультатно.

Ответы [ 4 ]

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

Лучший подход - правильно перестроить логику в приложении Windows GUI, чтобы оно отображалось как компонент COM. Приложение с графическим интерфейсом и PHP-скрипт могут вызывать COM-компонент и использовать одну и ту же логику.

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

Это то, для чего предназначен COM. И, конечно, PHP имеет развитую библиотеку для вызова COM-компонентов в Windows.

Это действительно плохая идея - вызывать приложение с графическим интерфейсом из веб-приложения. Вы задаете проблемы при этом. Подход COM является наиболее предпочтительным.

Обновление: PHP COM DOC

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

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

Извлечение информации из приложения с графическим интерфейсом невозможно, если только оно не отправляет вывод через стандартный вывод или файл.

0 голосов
/ 10 сентября 2009

Наше окончательное решение было для моего босса, чтобы изменить его приложение для Windows. Он мог писать на консоль из приложения, а затем мы могли читать вывод на эту консоль.

Amy

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

Вы можете передавать параметры в приложение win form так же, как в приложение командной строки. Использование параметра arguments в методе main.

Это потребует некоторой модификации вашего приложения winforms, но это позволит вам вызывать exe из php, передавая некоторые параметры.

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

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