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

Вниз

передать данные в другое приложение   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.031 c
15-1220422642
Dagir
2008-09-03 10:17
2008.10.26
Русский help по Delphi и по DBGrid


2-1221740702
Cosinus
2008-09-18 16:25
2008.10.26
Как запретить показ системного меню?


15-1220504333
quake
2008-09-04 08:58
2008.10.26
Создание карт


2-1221944652
Ruzzz
2008-09-21 01:04
2008.10.26
Unicode в D2009


1-1200550893
Layner
2008-01-17 09:21
2008.10.26
Посоветуйте ф-ю определиня размера ОЗУ более 2гиг