none
Передача данных дочернему процессу при запуске RRS feed

  • Вопрос

  • Всем привет! Подскажите как надежно передать некоторую строку дочернему процессу при его запуске. Это может быть, например, адрес именованного канала для связи с родительским процессом, ну или любая другая строка небольшой длины. Строка индивидуальна, в общем случае, для каждого процесса. Процесс может быть как консольным, так и оконным. Под надежностью понимаются стандартные, известные средства Windows, которые работают как на Win32 так и на Win64, на мобильных Windows, без каких либо хаков, но и которые недоступны внешнему глазу пользователю, прикладному разработчику без дополнительных усилий.

    Командная строка не подходит, так как видна прикладному разработчику.

    Переменные окружения уже лучше, но функции getenv/putenv работают не во всех видах приложений (имею ввиду флаг /ZW).

    Глобальная таблица атомов - тут все равно нужно как-то передать ATOM

    Как вы решали такую задачу?

Ответы

  • Для передачи уникальных данных в момент запуска потомка, родитель ограничен параметрами CreateProcess. По другому, думаю, никак. Если Вы не хотите "загружать" разработчика парсингом командной строки, пусть это делает библиотека.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

Все ответы

  • Командная строка не подходит, так как видна прикладному разработчику.

    Дочерний процесс запускается родительским программно. И командную стоку он формирует. О каком разработчике Вы говорите? См. параметры CreateProcess, или чем Вы его запускаете?

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!


    • Изменено kosuke904 2 мая 2014 г. 18:32
  • Ау! Ответ требуется? Или было важно только задать вопрос?

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

  • Тут вопрос касается разработки библиотеки, которая довольно прозрачно должна создать канал сообщения между родительским процессом и дочерним. Соответственно, будет нежелательным, если разработчик дочернего приложения будет видеть ненужные ему аргументы в командной строке
  • Да, требуется конечно же :-) Просто раньше не было времени зайти на форум
  • Если я правильно Вас понял, библиотека берет на себя прием и передачу данных между процессами. А разработчик приложения пользуется вызовами этой библиотеки и не знает о способе связи. Так? Тогда используйте любой стандартный способ передачи данных между процессами, какой Вам по душе. Все они описаны здесь. Сценарий следующий: родительский процесс готовит данные для передачи, запускает дочерний, дочерний процесс вызовом библиотеки открывает канал передачи и сообщает родителю, что он готов (с помощью события, например). Родитель отправляет данные.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

  • Да, правильно поняли. В Вашем сценарии есть пробел, который является сутью вопроса:

    Дочерний процесс вызовом библиотеки открывает канал передачи: как дочерний процесс откроет его, не зная куда подключаться? Родительский процесс должен передать некий адрес, по которому нужно подключится к нему
  • Для передачи уникальных данных в момент запуска потомка, родитель ограничен параметрами CreateProcess. По другому, думаю, никак. Если Вы не хотите "загружать" разработчика парсингом командной строки, пусть это делает библиотека.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!