Вопрос

У меня есть особая проблема, у меня есть некоторая программа, которую я не могу изменять, но это дает некоторую функциональность, которую я хотел бы использовать в офисе. Поэтому я пишу плагин для офиса, который принимает мой документ, выполняет программу на заднем плане, помещает документ на stdin. Программа пишет на STDOUT, и я возвращаюсь к моей программе, чтобы опубликовать процесс.

Это все работает нормально, за исключением того, что программа просит пароль, который я не хочу ставить на stdin. У инструмента есть способ прочитать пароль от любого другого входного потока, но ему нужно номер файлового дескриптора, который он должен читать.

Итак, вот мой вопрос: как я могу (в пределах среды .NET) открыть поток на дескрипторе файлов с номером, который я могу дать в качестве параметра к этой программе? В идеале я хочу написать что-то вроде:

process.start("start-program --password-fd " + x);
stream = new StreamWriter(x);
stream.write("secritpwd");

ECT .. (но затем магически исправлено, так что он будет работать;))

Я надеюсь, что кто-то может помочь мне.

Спасибо

Это было полезно?

Решение

Я точно не уверен, что именно это приложение означает «файловый дескриптор», но вы сможете пройти ручку наследственной анонимной трубы. Видеть AnonymousPipeserversTream. Отказ (Это предполагает, что вы по крайней мере .NET 3.5.)

Основной контур будет что-то подобное:

  • Создать анонимногипесерВервилте.
  • Пройти ручку трубы (pipeServer.GetClientHandleAsString()) как параметр командной строки к вашему исполняемому файлу.
  • Напишите на анонимиппиперсервес.

Другие советы

Дескрипторы файлов не являются частью Windows - они являются частью библиотеки времени выполнения C. Вы должны были бы написать DLL в C или C ++, чтобы сделать ваш файл ввода / вывода, а затем вызовите его из вашей программы C #. Получите номер файлового дескриптора из C DLL C DLL для передачи в другой код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top