Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.12.22;
Скачать: CL | DM;

Вниз

"Обернуть" консольное приложение своим   Найти похожие ветки 

 
БарЛог ©   (2013-07-04 08:43) [0]

Всем привет.
Возник интерес: а можно ли "обернуть" консольное приложение своим?
Ну то есть приложение A.exe получает на вход некоторые параметры (допустим):
-b (вывести сообщение_1)
-c (вывести сообщение_2, выполнить некоторое действие)

Можно ли сделать приложение B.exe, которое содержит в себе приложение A.exe, вызывает его с этими параметрами (но, например, при вызове "B.exe -c" ничего не выводит на экран).

Спасибо.


 
[ВладОшин] ©   (2013-07-04 08:51) [1]


> B.exe, которое содержит в себе приложение A.exe

т.е. имеем один файл(B.exe)?


 
Алканавт расправил плечи   (2013-07-04 08:53) [2]

не очень понятна постановка, в частности "НИЧЕГО не выводит на экран". сделать хреновину, которая будет съедать и обрабатывать консольный вывод — не вопрос. сделать так, чтоб и консоль не появлялась — вопрос…


 
БарЛог ©   (2013-07-04 09:04) [3]

> [ВладОшин] ©   (04.07.13 08:51) [1]

>т.е. имеем один файл(B.exe)?

имеем файл B.exe, который делает то же, что и A.exe, но при этом "не пропускает" некоторые параметры A.exe

Алканавт расправил плечи   (04.07.13 08:53) [2]

> не очень понятна постановка, в частности "НИЧЕГО не выводит на экран"

Ничего не выводит в консоль. Консоль при этом висит на экране.


 
[ВладОшин] ©   (2013-07-04 09:14) [4]


> имеем файл B.exe, который делает то же, что и A.exe

это понятно.

A.exe инкапсулирован в B.exe или валяется рядом?

Если A.exe внутри B.exe (допустим, как ресурс), то его можно сохранять на диск и запускать(что легко), или запуск должен быть из памяти?(что ой, но СергейМ, вроде, говорит, что делал как-то)


> Ничего не выводит в консоль. Консоль при этом висит на экране.

консоль от B.exe по-любому есть, это понятно.
но A.exe может создать свою консоль, принудительно.


 
Алканавт расправил плечи   (2013-07-04 09:24) [5]


> Ничего не выводит в консоль. Консоль при этом висит на экране
Запросто, читай про анонимные каналы. Теоретически существует ещё озвученный ниже вариант "консольное приложение создаёт дополнительную консоль", но 1) таких программ не припоминаю; 2) тебе же нужно не общее решение на все случаи жизни, а одну конкретную экзешку "обернуть"? 3) даже если создаёт дополнительную консоль, то несколько усложнит решение, но принципиально его не изменит.


 
Юрий Зотов ©   (2013-07-04 11:26) [6]

Делал я подобную штуку. Насколько помню, делал так: из своей программы B запустил чужую программу A, как дочерний процесс с наследуемыми дескрипторами ввода-вывода (см. параметры CreateProcess). После этого программа B работает в консоли программы A (причем окно этой консоли можно даже и спрятать, если нужно).

Таким образом, программе A становится доступен весь ввод-вывод программы B и с ним можно делать что угодно (см. справку по теме Console Functions).


 
robt5   (2013-07-04 11:33) [7]


> не очень понятна постановка

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


 
[ВладОшин] ©   (2013-07-04 11:51) [8]


> работу чужого кода выдать за свой "шедевр"

может, просто запретить что-то делать
есть консольные утилиты, которые делают что-то, что простому юзеру не надо.
А, частично, - надо. Например изменить настройки сетевой карточки
Такие утилитки можно по тихому запускать из своего exe, но от имени админа, именно как
> как дочерний процесс с наследуемыми дескрипторами ввода-
> вывода (см. параметры CreateProcess)

а некоторые параметры тупо "съедать".

А по-хорошему, админы должны права/политики нарезать соответств енно/ующие, но их обычно не дождаться :)


 
Юрий Зотов ©   (2013-07-04 12:33) [9]

В [6] неточность маленькая вышла.

> программа B работает в консоли программы A
Наоборот точнее - чужая программа A работает в консоли нашей программы B.

> программе A становится доступен весь ввод-вывод программы B
Тоже точнее наоборот  - нашей программе B становится доступен весь ввод-вывод чужой программы A.


 
БарЛог ©   (2013-07-04 13:11) [10]

Юрий Зотов ©   (04.07.13 11:26) [6]

Спасибо. А чем их "склеить" то можно?
Не хотелось бы программу A (чужую) в папку программы/системы класть, а иметь на компьютере пользователя только B.exe

robt5   (04.07.13 11:33) [7]
[ВладОшин] ©   (04.07.13 11:51) [8]
> есть консольные утилиты, которые делают что-то, что простому юзеру не надо.
> А, частично, - надо. Например изменить настройки сетевой карточки

Точно так.


 
брат Птибурдукова   (2013-07-04 13:12) [11]


> автор решил работу чужого кода выдать за свой "шедевр"
Постановка была непонятна в плане насколько "ничего" должно быть на экране. А автор скорее всего допиливает функциональность в древней неподдерживаемой сто лет утилите…


 
DVDRe   (2013-07-04 13:14) [12]

как вариант зашить прогу А в ресурсы проги В
закидывать в папку темп и запускать с нужными параметрами
позже удалять при закрытии проги B


 
брат Птибурдукова   (2013-07-04 13:23) [13]


> DVDRe   (04.07.13 13:14) [12]
Это никак не отвечает на исходный вопрос


 
DVDRe   (2013-07-04 13:46) [14]

вопрос был "можно ли "обернуть""
считаю что можно


 
robt5   (2013-07-04 14:17) [15]


> БарЛог ©   (04.07.13 13:11) [10]

тогда зачем это все прятать если такие благие цели ?


 
БарЛог ©   (2013-07-04 16:51) [16]

DVDRe   (04.07.13 13:14) [12]

> как вариант зашить прогу А в ресурсы проги В
> закидывать в папку темп и запускать с нужными параметрами
> позже удалять при закрытии проги B

Это делается из делфи? (несколько лет туда не смотрю в силу немного другой профессии)

robt5   (04.07.13 14:17) [15]

> тогда зачем это все прятать если такие благие цели ?

За тем, что может найтись "умник", который сделает:
a.exe /?
b.exe /?
ну и дальше по тексту...


 
Юрий Зотов ©   (2013-07-04 17:33) [17]


> БарЛог ©   (04.07.13 16:51) [16]
> Это делается из делфи?

Как два байта переслать, примеров сети вагон. Надо только предусмотреть удаление файла A.EXE даже при аварийном завершении программы B.


 
брат Птибурдукова   (2013-07-04 18:08) [18]


> Это делается из делфи?
На раз-два.


> За тем, что может найтись "умник", который сделает
Чё-то всё страньше и страньше… А что это за консольная утилита такая, что не следует смотреть её справку и запускать с одним каким-то параметром?


> предусмотреть удаление файла A.EXE даже при аварийном завершении
> программы B
Кстати, очень интересно, а не прокатит ли это http://www.transl-gunsmoker.ru/2009/02/blog-post_11.html ? Никто не пробовал?


 
Юрий Зотов ©   (2013-07-04 18:37) [19]

> брат Птибурдукова   (04.07.13 18:08) [18]

Думал об этом. Но может не прокатить - как только запишем ресурс на диск, так система тут же его и убьет. А чтобы не убила, нужно файл не закрывать - но тогда может не прокатить его запуск.


 
DVDRe   (2013-07-05 00:09) [20]

а батники можно ещё использовать на запуск с нужными парамами.
для_сети_запуск.bat
выключить_сеть.bat
смена_ипа.bat
а А.EXE запихнуть подальше, в папку WINDOWS -)
в батнике полный путь до EXE
-
зашивается в ресурс из делфи, а сливаются ресурсные из консольной, прописывая нужные файлы и он выдает RC и линкуя в дельфи { *.RC}



Страницы: 1 вся ветка

Текущий архив: 2013.12.22;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.007 c
15-1373039110
^-k-^
2013-07-05 19:45
2013.12.22
ajax


2-1362440457
Вова
2013-03-05 03:40
2013.12.22
Как сделать Object Inspector


2-1362069393
Win XP
2013-02-28 20:36
2013.12.22
Разрешение экрана


4-1268421869
Жэня
2010-03-12 22:24
2013.12.22
Проблема получением сообщения WM_COPYDATA, Проблема с аглоритмом


15-1372872886
Кирюха
2013-07-03 21:34
2013.12.22
Проблема с usb-портами