Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
Внизпередать данные в другое приложение Найти похожие ветки
← →
burrat (2008-09-19 15:08) [0]посоветуйте, как лучше передать данные в другое запускаемое приложение. В основном текст (по структуре ini). Есть вариант обработать чем нибудь типа base64 и передать в качестве параметра запуска, есть ограничение на длину параметра (Вин2000 и выше)?
Как еще можно передать, учитывая, что эта программа может быть консольной.
ЗЫ файлами не годится.
← →
Palladin © (2008-09-19 15:11) [1]и почему файлами не годится?
← →
Jeer © (2008-09-19 15:12) [2]
> как лучше передать данные в другое запускаемое приложение
Откуда передать ?
Из мозга создателя-фантазера ?
← →
ANB (2008-09-19 15:15) [3]
> Как еще можно передать, учитывая, что эта программа может
> быть консольной.
Есть целая куча способов.
Выбор способа зависит от того, какими способами запускаемое приложение умеет данные принимать.
Кстати, файлами - один из самых экономных способов.
← →
Jeer © (2008-09-19 15:18) [4]
> один из самых экономных способов.
Ты не прав - винт точится при этом, а его жалко.
← →
burrat (2008-09-19 15:24) [5]"Другое приложение" - часть сервера отправки писем, этому приложению и передается структура в виде ini, в ней задаются параметры соединений, текст письма и получатель. Это приложение должно запускаться, формировать письмо и по smtp слать, потом закрываться. Встает вопрос о том, как передать ему данные.
Мое приложение следить за некими параметрами компьютера, при некоторых значениях этих параметров нужно отсылать письмо, используя "другое приложение".
Файлами нельзя. Просто нельзя.
← →
Jeer © (2008-09-19 15:26) [6]А теперь все с начала, внятно, с чувством и тактом ( размерностью ).
← →
ANB (2008-09-19 15:27) [7]
> Встает вопрос о том, как передать ему данные.
Для начала надо поставить вопрос - а как это приложение готово данные принять.
> Ты не прав - винт точится при этом, а его жалко.
Тогда - MMF. Хотя это все равно "файл", а файлы же низзя :)
← →
Dmitry S © (2008-09-19 15:37) [8]А почему бы не через STD INPUT ?
← →
Palladin © (2008-09-19 15:38) [9]ну раз так вот все жестоко и прямо вот нельзя через файлы, то через пайпы
← →
burrat (2008-09-19 15:39) [10]
> Для начала надо поставить вопрос - а как это приложение
> готово данные принять.
Так, как это опишу я, я задаю такт =)
Параемтром вроде бы получается удобно, никаких файловых операций, но если у меня данных на 1Кб, после base64 их может быть почти в двое больше, встает вопрос об ограничении длины параметра запуска.
PS Если очень хочется пофлеймить про файлы - приложения (оба) запускаются от учетной записи у которой нет прав на запись на диск. Проще говоря - нужно забыть про файлы, как я и написал в самом первом сообщении.
> Jeer © (19.09.08 15:26) [6]
Читайте сначала пятое сообщение, потом самое первое.
← →
burrat (2008-09-19 15:40) [11]Palladin, спасибо, сейчас посмотрю.
← →
han_malign © (2008-09-19 15:42) [12]
> Ты не прав - винт точится при этом, а его жалко.
если запуск из другого процесса: Map File/Pipe/etc. + bInheritHandles для анонимных...
← →
burrat (2008-09-19 15:42) [13]Вопрос, прочитал, что pipe работают через стандартные файловые операции, эти операции выполняются от имени пользователя запустившего приложение или от system?
← →
clickmaker © (2008-09-19 15:45) [14]> "Другое приложение" - часть сервера отправки писем
с исходниками?
← →
Jeer © (2008-09-19 15:46) [15]
> > Jeer © (19.09.08 15:26) [6]
>
> Читайте сначала пятое сообщение, потом самое первое.
Знаешь, разбирайся сам в джампах, мне лень.
"Чем точнее изложен вопрос, тем скорее получите правильный ответ" (С) может и мой :))
← →
burrat (2008-09-19 15:49) [16]
> clickmaker © (19.09.08 15:45) [14]
> > "Другое приложение" - часть сервера отправки писем
с исходниками?
>
да
← →
Palladin © (2008-09-19 15:50) [17]
> от имени пользователя запустившего приложение
естественно
← →
clickmaker © (2008-09-19 15:58) [18]> [16] burrat (19.09.08 15:49)
тогда через какой-то IPC (пайпы, сокеты, WM_COPYDATA)
← →
ANB (2008-09-19 16:16) [19]
> тогда через какой-то IPC (пайпы, сокеты, WM_COPYDATA)
+ COM, DCOM, DDE.
Впрочем, MMF тоже поканает.
Однозначно будут проблемы с командной строкой - на XP больше 300 байт у меня не передалось. А на некоторых компах и того меньше.
← →
Palladin © (2008-09-19 16:22) [20]
> Однозначно будут проблемы с командной строкой - на XP больше
> 300 байт у меня не передалось.
не верю, возможно присутствовали управляющие символы
← →
han_malign © (2008-09-19 16:54) [21]
> COM, DCOM, DDE
- COM - не прокатит
- DCOM - садомазохист...
← →
ANB (2008-09-19 17:44) [22]
> Palladin © (19.09.08 16:22) [20]
Не. Тупые строки. Обнаружил случайно - у юзеров параметры не жрались при запуске через CreateProcess. Причем ни ошибки ничего. Просто молча обрезалось.
> DCOM - садомазохист...
Зато писать мало :)
← →
Palladin © (2008-09-19 19:47) [23]та ну... я экспериметрировал, все там хорошо, проблема может быть только в приложениях...
← →
Leonid Troyanovsky © (2008-09-20 23:11) [24]
> ANB (19.09.08 17:44) [22]
> Не. Тупые строки. Обнаружил случайно - у юзеров параметры
> не жрались при запуске через CreateProcess. Причем ни ошибки
> ничего. Просто молча обрезалось.
Для CreateProcess - 32767.
А, вот, максимальная длина каждого параметра - MAX_PATH.
Ну, или, 255, уже не упомню, бо проверялось еще на NT4.
А про разные ОС - это более про cmd.exe, оно и документировано.
--
Regards, LVT.
← →
Германн © (2008-09-21 00:34) [25]
> Leonid Troyanovsky © (20.09.08 23:11) [24]
>
>
> > ANB (19.09.08 17:44) [22]
>
> > Не. Тупые строки. Обнаружил случайно - у юзеров параметры
> > не жрались при запуске через CreateProcess. Причем ни
> ошибки
> > ничего. Просто молча обрезалось.
>
> Для CreateProcess - 32767.
Ооо. Оказывается не только я настолько был туп, что ввёл в стародавнее время для передачи параметра переменную Integer вместо Longint. :)
← →
Городской Шаман (2008-09-21 09:39) [26]тогда медитируй над mailslot
CreateMailslot
http://msdn.microsoft.com/en-us/library/aa365147(VS.85).aspx
← →
Leonid Troyanovsky © (2008-09-21 11:44) [27]
> Городской Шаман (21.09.08 09:39) [26]
> тогда медитируй над mailslot
Если запускающее приложение консольное,
то кроме стандартного ввода/вывода ничего и не надо.
Только в запускаемом делать GetStdHandle(STD_INPUT_HANDLE)
надо не позднее OnCreate формы, если таковая существует.
А для самого произвольного случая - CreatePipe, DuplicateHandle
и передача значения хендла другому процессу.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.006 c