C#: Перенаправьте Стандартный вывод Процесса, который Уже Работает

Мне было нелегко получать вывод "подпроцесса" (один запущенный внутренне процессом черного ящика, который я контролирую через c# Систему. Диагностика. Процесс)

Я послушал совет, данный ответом моего предыдущего сообщения: здесь. И там можно найти детали того, что я проходил.

На данном этапе, хотя я могу определить местоположение процесса ssh, порожденного process1.exe, который я контролирую. Я не могу перенаправить вывод к своей c# программе, потому что это "уже выполняющий процесс" и не было запущено непосредственно от C#.

Кажется, что, все свойства, которые Вы устанавливаете в Системе. Диагностика. Объект процесса, только вступите в силу при явном запуске того процесса из c# приложения; если некоторый другой "неуправляемый процесс" запустил процесс, устанавливание этого перенаправления не имеет никакого эффекта, потому что процесс был уже запущен чем-то, что не указывало перенаправление, в котором я нуждаюсь.

Там какой-либо путь состоит в том, чтобы перенаправить вывод процесса, который был уже запущен (процесс, запущенный программой, для которой у меня нет объема, чтобы предварительно указать перенаправление, прежде чем этот процесс будет запущен)?

13
задан Community 23 May 2017 в 11:59
поделиться

3 ответа

Можно также использовать простой текстовый редактор и интерфейс командной строки JDK. И Eclipse, и Netbeans - великолепные инструменты, но у них есть кривая обучения (которая IMHO круче языка Java).

Стоит рассмотреть возможность простого запуска и добавления среды IDE после ознакомления с платформой.

-121--4095189-

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

Для резервного копирования больших баз данных следует настроить непрерывное архивирование вместо pg _ dump .

  1. Набор архивации WAL .

  2. Делать свои основные резервные копии, например, каждый день при помощи
    , psql template1-c «выбирает pg_start_backup (' 'дата + %F-% T»') « , rsync-a - удаляют/var/lib/pgsql/data//var/backups/pgsql/base / , psql template1-c «выбирает pg_stop_backup ()» '

, А восстанавливают, было бы так же просто как восстановление базы данных, и WAL регистрируется не более старый, чем время pg_start_backup от резервного местоположения и старта Пост-ГРЭС. И это будет намного быстрее.

-121--901252-

Можете ли вы вместо перенаправления выходных данных непосредственно из выполняющегося процесса захватить выходные данные, когда они покидают процесс A в намеченном месте назначения, передать их в новый процесс?

1
ответ дан 2 December 2019 в 02:05
поделиться

Возможно, вы можете посмотреть на этот код . Я нашел его при поиске решения, чтобы сделать то же самое; Тем не менее, это был не совсем процесс.

Если это не поможет вам посмотреть на P / вызывание setStdhandle и getstdhandle , которые должны использоваться при перенаправлении стандартного вывода. Я думаю, что это то, что образец кода связан с тем, что происходит для перенаправления.

Примечание : Я только что посмотрел на эти вещи и на самом деле не получил его, чтобы работать правильно. (У меня было лучшее решение для меня, потому что у меня был доступ к исходному коду, выводу на консоль)

1
ответ дан 2 December 2019 в 02:05
поделиться

Предполагая, что нет более простых растворов, вы можете попытаться запустить кусок кода в другом процессе через CreateRemoteThread (), объяснил здесь .

2
ответ дан 2 December 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: