Форум: "Прочее";
Текущий архив: 2013.12.22;
Скачать: [xml.tar.bz2];
Вниз"Обернуть" консольное приложение своим Найти похожие ветки
← →
БарЛог © (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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.002 c