Как я могу сделать скрытое, одноразовое приложение консоли и общаться с ним?

StackOverflow https://stackoverflow.com/questions/1295824

Вопрос

Я написал небольшое приложение для консоли, чтобы обернуть стороннюю DLL, у которого есть проблемы. Я называю это из приложения с графическим интерфейсом, используя _popen, и просто хочу прочитать значение из стандартного вывода консольной программы. При этом кратко отображается нежелательное окно консоли.

Я знаю, что этого можно избежать, используя определенную конфигурацию StartupinFo с CreateProcess. Тем не менее, я бы предпочел поместить исправление в приложении консоли и по -прежнему использовать _popen. Создание дочернего процесса с использованием подсистемы Windows (т.е. Winmain вместо Main) не заставляет окно консоли уйти. По -видимому, операционная система выделяется консоль для облегчения связи _popen.

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

Это было полезно?

Решение

1) Я поддерживаю идею запустить ее с набор Startupinfo, чтобы скрыть окно. Это SOP на Windows, поэтому он будет работать лучше, чем попытка навязать Unix SOP. Более того, вы можете захотеть увидеть выход при тестировании его изоляции.

2) или вы можете сделать приложение GUI, которое никогда не показывает окно. Это составляет консольное приложение без консоли.

редактировать

А ссылка на сайт Опубликованные Indeeres показывает, как сделать второй вариант.

редактировать

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

Есть много альтернатистов. Самым близким к двум обсуждаемым подходам до сих пор будут названы трубы, но вы также можете использовать различные формы МПК, включая соперные.

Однако вы не можете сделать доступ к STDIN/STDOUT/STDERR без консоли. Вы можете запустить с скрытой консоли, но она на самом деле должна иметь ее.

редактировать

Разрешает ли LUA запускать исполняемый файл напрямую, а не через cmd.exe?

Другие советы

Для связи между родительским применением графического интерфейса и скрытым применением детской консоли. Справочник по следующим статьям MSDN:

Я не думаю, что вы можете использовать stdin/stdout, не запустив консоль. Что вы можете сделать, это написать приложение Orabper как приложение GUI, в котором не отображается окно (просто переключение main () на winmain ()), а затем используйте какой -то тип механизма IPC, как сокет или общая память.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top