Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.003 c
15-1371997140
Артём
2013-06-23 18:19
2013.12.22
Найдётся ли работа новичку?


2-1362378114
Dikey
2013-03-04 10:21
2013.12.22
Суммирование столбцов StringGird


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


2-1362263808
Вова
2013-03-03 02:36
2013.12.22
TListView выдает Stream read error


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский